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=]) }
这会根据需要生成小数点后四位数字。
我正在尝试格式化数字,以便小数点后始终有 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=]) }
这会根据需要生成小数点后四位数字。