当我将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的开发人员参考中的声明相矛盾:

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

我究竟做错了什么?

最佳答案

属性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中的描述匹配。

关于ios - NSNumberFormatter的不一致行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32125129/

10-11 19:49