当我将 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
开发人员引用中的声明相矛盾:
Determines whether the receiver uses minimum and maximum significant digits properties.
我做错了什么?
最佳答案
属性usesSignificantDigits
控制minimumSignificantDigits
和maximumSignificantDigits
的使用,而不是minimumFractionDigits
和maximumFractionDigits
。您没有在代码中设置 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/