当我将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
控制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/