当我将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
的开发人员参考中的陈述相矛盾:
确定接收器是否使用最小和最大有效数字属性。
我做错了什么?
答案 0 :(得分:1)
属性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中的描述匹配。
答案 1 :(得分:1)
如果usesSignificantDigits
为true
格式化程序正在使用minimumSignificantDigits
和maximumSignificantDigits
minimumSignificantDigits
的默认值为1.
maximumSignificantDigits
的默认值为6.
如果usesSignificantDigits
为false
格式化程序正在使用maximumFractionDigits
所以行为是正确的。