NSNumberFormatter 的不一致行为
NSNumberFormatter's inconsistent behaviour
当我将 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)
以上代码 returns "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.
中的描述
如果 usesSignificantDigits
是 true
格式化程序正在使用 minimumSignificantDigits
和 maximumSignificantDigits
minimumSignificantDigits
的默认值为 1。
maximumSignificantDigits
的默认值为 6。
如果 usesSignificantDigits
是 false
格式化程序正在使用 maximumFractionDigits
所以行为是正确的。
当我将 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)
以上代码 returns "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.
如果
usesSignificantDigits
是true
格式化程序正在使用minimumSignificantDigits
和maximumSignificantDigits
minimumSignificantDigits
的默认值为 1。
maximumSignificantDigits
的默认值为 6。如果
usesSignificantDigits
是false
格式化程序正在使用maximumFractionDigits
所以行为是正确的。