确定浮点数中的第一个零在哪里
Posted
技术标签:
【中文标题】确定浮点数中的第一个零在哪里【英文标题】:Determine where is the first zero in a float number 【发布时间】:2011-02-23 18:07:54 【问题描述】:在我的应用程序中,我有一些随机浮点数。我必须确定,零的周期从哪里开始削减数字并将其显示在 UILabel 中。
因此,例如,如果我有数字 3.05,它会显示为 3.0500000,而我希望它正确显示为“3.05”。
【问题讨论】:
您能否发布您现有代码的 sn-p,以便答案可以针对您已经在做的事情? 它不会总是以零结束,甚至不会以任何特定的方式结束。例如,您可以获得 1.999999998 或其他东西。使用格式说明符,就像 Dean 说的那样。 @Jesse Rusak 我只需要去掉零... Knodel - 我想你可能会惊讶有多少浮点数不是你期望的数字:) 我什至没有在我的回答中考虑错误! 【参考方案1】:最简单的方法是使用像@"%.2f" 这样的长度限制。但我认为,如果你想把零轮辋,你应该使用这个:
NSString* string = [[NSString stringWithFormat: @"%f", 3.05000000] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"0"]];
将返回 3.05
NSString* string = [[NSString stringWithFormat: @"%f", 3.0500100000] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"0"]];
将返回 3.05001 而@"%.2f" 将返回 3.05
您应该注意到舍入错误,因此对于数字 3.0500000010000,将返回字符串 3.05。
【讨论】:
我觉得你的回答可能比我的好:( 谢谢!这正是我一直在寻找的【参考方案2】:使用format specifiers:
// Print max two numbers after the decimal point
NSString *string = [NSString stringWithFormat:@"%.2f", number];
如果您需要计算第一个 0 的位置,请将其渲染为一个字符串,然后在该字符串中搜索第一个 '0'
// Render the complete string
NSString *completeNumber = [NSString stringWithFormat:@"%f", number];
// Get the first 0
NSRange range = [completeNumber rangeOfString:@"0"];
// Trim the string
NSString myString = [completeNumber substringWithRange:NSMakeRange(0, range.location)];
【讨论】:
查看我的示例以修剪到第一个 '0' 但是,Max 使用stringByTrimmingCharactersInSet
有一个很好的答案,我认为这可能会更好!
谢谢!但是,Max 的答案对我来说更好:)
嗯,这是一个更好的答案;)
NSRangeMake
应该是NSMakeRange
。
哎呀——我是凭记忆打字的!【参考方案3】:
你试过了吗:
NSString* myNumber = [NSString stringWithFormat:@"%.02f", number];
两位数:
@"%.02f" = 3.05
三位数:
@"%.03f" = 3.050
【讨论】:
问题是我不知道我需要多少个数字——数字每次都不一样。【参考方案4】:您的问题存在问题:该浮点数中没有重复的零。更具体地说,3.05 的浮点表示实际上并不等于 3.05——它实际上更像 3.04999999999999982236431605997495353221893310546875。如果这很重要,您最好的选择是使用 NSDecimalNumber 及其字符串转换方法。与二进制浮点不同,它可以精确地表示以 10 为底的数字。
【讨论】:
即使是 64 位浮点数,也只能得到 17 位有效数字。但我确实理解您使用夸张来表达一个有效的观点。以上是关于确定浮点数中的第一个零在哪里的主要内容,如果未能解决你的问题,请参考以下文章