【问题标题】: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 - 我想你可能会惊讶有多少浮点数不是你期望的数字:) 我什至没有在我的回答中考虑错误!

标签: iphone objective-c xcode floating-point


【解决方案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 位有效数字。但我确实理解您使用夸张来表达一个有效的观点。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 2012-09-07
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多