ios - NSNumberFormatter 的不一致行为

标签 ios swift nsnumberformatter

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

相关文章:

ios - 调整从 xib 加载的 UIView 的大小作为 tableHeaderView

iphone - NSString - float 的最大 1 位小数

swift - 按国家 ISO 获取 NumberFormatter 货币

iphone - 比 NSNumberFormatterBehaviorDefault 更喜欢 NSNumberFormatterBehavior10_4 是个好主意吗?

ios - 如何在 Core Plot 中使用多个自定义标签?

ios - 字符串下标耗时长

objective-c - XCode 4、ParseKit 和存档目标

ios - 如何从 MKLocalSearchCompletion 中提取国家和城市?

Swift - 将导入放在文件开头与中间某处是否有任何性能差异?

ios - swift MapKit : Calculate ETA for a specific Route and not for directions?