NSNumberFormatter的不一致行为

时间:2015-08-20 17:55:14

标签: ios swift nsnumberformatter

当我将usesSignificantDigits属性设置为true时,NSNumberFormatter不会服从maximumFractionDigits。我认为这也适用于minimumFractionDigits

例如:

let formatter: NSNumberFormatter = NSNumberFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.maximumFractionDigits = 2
formatter.allowsFloats = true
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
formatter.usesSignificantDigits = true

let result = formatter.stringFromNumber(1.2345)

以上代码返回"1.2345"作为结果。预期结果为"1.23"。当我将usesSignificantDigits设置为false时,它可以正常工作。

这与usesSignificantDigits的开发人员参考中的陈述相矛盾:

  

确定接收器是否使用最小和最大有效数字属性。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

属性usesSignificantDigits控制minimumSignificantDigitsmaximumSignificantDigits的使用,而不是minimumFractionDigitsmaximumFractionDigits。您未在代码中设置maximumSignificantDigits,因此它将使用其默认值(似乎为6)。

考虑原始代码的这种增强功能:

let formatter: NSNumberFormatter = NSNumberFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.maximumFractionDigits = 2
formatter.allowsFloats = true
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle

// Makes formatter use maximumSignificantDigits
formatter.usesSignificantDigits = true

println(formatter.maximumSignificantDigits) // Prints 6

// Will use 6 significant digits, hence "1.2345"
let result = formatter.stringFromNumber(1.2345)

如果您不想使用maximumSignificantDigits的值,则不应将usesSignificantDigits设置为true。此行为与official documentation中的描述匹配。

答案 1 :(得分:1)

  • 如果usesSignificantDigitstrue格式化程序正在使用minimumSignificantDigitsmaximumSignificantDigits

    minimumSignificantDigits的默认值为1.
    maximumSignificantDigits的默认值为6.

  • 如果usesSignificantDigitsfalse格式化程序正在使用maximumFractionDigits

所以行为是正确的。