NumberFormatter 分数数字混淆 (swift)

NumberFormatter Fraction Digits confusion (swift)

我正在尝试格式化数字,以便小数点后始终有 4 位数字。例如:

1       // 1.0000
0       // 0.0000
1.23    // 1.2300
1.234   // 1.2340
1.2345  // 1.2345
1.23456 // 1.2346 **[edited]**

我尝试了以下各种组合:

let formatter = NumberFormatter()
formatter.usesSignificantDigits = true // I believe this the default so not required
formatter.numberStyle = .decimal

formatter.maximumSignificantDigits = 4
formatter.minimumSignificantDigits = 4
formatter.maximumFractionDigits    = 4
formatter.minimumFractionDigits    = 4

let p = formatter.string(from: NSNumber(value: percentage))
debugPrint("p = \(p)")

但在其中两种情况下,这是我得到的:

0         // 0.000
0.0123456 // 0.01234

这是一个例子:

和调试输出:

"p = 0.9375"
"p = 0.000"
"p = 0.03125"
"p = 0.000"
"p = 0.03125"

我错过了什么?

[我以为我前段时间在这里看到了很好的解释,但现在找不到了——如果有人能给它一个link,那就太好了!]

如果您要指定小数位数,则只需删除这些有效数字即可:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 4
formatter.minimumFractionDigits = 4

let values: [Double] = [
    1,       // 1.0000
    0,       // 0.0000
    1.23,    // 1.2300
    1.234,   // 1.2340
    1.2345,  // 1.2345
    1.23456  // 1.2346 ... if you really want 1.2345, then change formatter’s `roundingMode` to `.down`.
]

let strings = values.map { formatter.string(for: [=10=]) }

这会根据需要生成小数点后四位数字。