确定浮点数中的第一个零在哪里

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 位有效数字。但我确实理解您使用夸张来表达一个有效的观点。

以上是关于确定浮点数中的第一个零在哪里的主要内容,如果未能解决你的问题,请参考以下文章

怎么精确提取一个浮点数的小数部分?

js 双精度浮点数

Numpy 错误“无法将字符串转换为浮点数:'Illinois'”

浮点数中的垃圾值

浮点数的基数排序

从字符串到浮点数与python中的argv