NSNumberFormatter maximumFractionDigits 和 maximumSignificantDigits 错误

Posted

技术标签:

【中文标题】NSNumberFormatter maximumFractionDigits 和 maximumSignificantDigits 错误【英文标题】:NSNumberFormatter maximumFractionDigits and maximumSignificantDigits bug 【发布时间】:2014-12-25 05:03:11 【问题描述】:

这是在 ios 8 上的 NSNumberForamtter 上同时使用 maximumFractionDigitsmaximumSignificantDigits 时出现的错误吗?

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;  
formatter.maximumSignificantDigits = 3;
NSLog(@"%@", [formatter stringFromNumber:@(0.3333)]); // output 0.333 expected 0.33

如果我只使用maximumFractionDigits,它就可以正常工作

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:@(0.3333)]); // output expected .33

【问题讨论】:

【参考方案1】:

这不是错误。来自文档:

注意

当数字格式化程序配置为使用有效数字时,它会忽略用于设置整数或小数位数的任何最小值或最大值。

https://developer.apple.com/documentation/foundation/nsnumberformatter/1417793-usessignificantdigits?language=objc

注意:如果将maximumSignificantDigitsminimumSignificantDigits 设置为任意值,则usesSignificantDigits 将自动设置为true。这与 maximumSignificantDigitsminimumSignificantDigits 的文档相矛盾,其中说:

您必须将 usesSignificantDigits 属性设置为 true 才能使该属性影响格式化行为。

您不需要将usesSignificantDigits 设置为true,它会将自己设置为true。

【讨论】:

以上是关于NSNumberFormatter maximumFractionDigits 和 maximumSignificantDigits 错误的主要内容,如果未能解决你的问题,请参考以下文章

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

NSNumberFormatter、NSDecimalNumber 和科学记数法

NSNumberFormatter 用于 2 个小数位

使用 NSNumberFormatter 循环中的 Objective C 自动释放

NSNumberFormatter 将浮点字符串格式化为整数

NSNumberformatter 添加额外的零