NSNumberFormatter 仅四舍五入到小数点后 3 位

Posted

技术标签:

【中文标题】NSNumberFormatter 仅四舍五入到小数点后 3 位【英文标题】:NSNumberFormatter only rounds to 3 decimal places 【发布时间】:2009-05-01 04:15:26 【问题描述】:

我正在尝试在 iPhone 应用程序中使用 NSNumberFormatter 将数字四舍五入到小数点后 5 位,但 [formatter stringFromNumber:] 总是返回四舍五入到 0.001(小数点后 3 位)的字符串。我做错了什么?

formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setRoundingMode:NSNumberFormatterRoundHalfUp];
[formatter setSecondaryGroupingSize:3];
[formatter setRoundingIncrement:[NSNumber numberWithDouble:0.00001]];

【问题讨论】:

【参考方案1】:

试试-setMaximumFractionDigits: 和-setMinimumFractionDigits:

这些配置小数分隔符后的位数。

【讨论】:

谢谢内森!我在阅读文档时一定遗漏了一些东西,但是它们与 setMaximumSignificantDigits: 和 setMinimumSignificantDigits: 有什么不同:(除了单词重要 )? 小数位是小数点后的数字。有效数字是数字的整体精度。所以 12.345 有 5 个有效数字和 3 个小数数字。而 0.0012 有 2 个有效数字和 4 个小数数字。 set(min/max)SignificantDigits:对于科学风格的输出很有用:123000 将是 1.23E5,有 3 个有效数字。 注意,如果使用 [ formatter setMinimumSignificantDigits ] 你必须先调用 [ formatter setUsesSignificantDigits: TRUE ];【参考方案2】:

试试 [格式化程序 setFormat:@"0.00000"];而不是 setRoundingIncrement:.

【讨论】:

我不认为 setFormat: 在 iPhone 上可用。见***.com/questions/416037/… 实际上,我收回了这一点。 setFormat:@"0.00000" 确实有效,但它不会四舍五入......我总是得到小数点后 5 个数字——例如,0.10000,而在这种情况下我真的只想要 0.1。 啊,对不起,我误解了你想要完成的任务。 我不太清楚我想要完成什么。您的回复很有帮助。谢谢。

以上是关于NSNumberFormatter 仅四舍五入到小数点后 3 位的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中使用 NSNumberFormatter 格式化货币输入

iOSNSNumberFormatter

舍入 NSDecimalNumber

使用 NSNumberFormatter 将数字转换为格式

NSNumberFormatter 货币符号

NSNumberFormatter - 获取货币代码的货币符号