【问题标题】:NumberFormatter Fraction Digits confusion (swift)NumberFormatter Fraction Digits 混淆(swift)
【发布时间】:2020-12-12 21:09:21
【问题描述】:

我正在尝试格式化数字,以便小数点后始终有 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"

我错过了什么?

[我以为我前段时间在这里看到了很好的解释,但再也找不到了——如果有人能放一个链接,那也太好了!]

【问题讨论】:

  • 你的格式适合我。
  • 好吧,现在我不知道该觉得自己多蠢还是少蠢!我在 OP 中添加了一些细节。我就是不知道哪里出了问题!
  • 尝试使用string(for:),这样您就不需要先创建NSNumber
  • @Joakim Danielson 这当然让事情变得更容易 - 谢谢!不幸的是,它没有修复格式...

标签: ios swift formatting nsnumberformatter nsformatter


【解决方案1】:

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

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: $0) }

根据需要产生小数点后的四位数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2015-11-29
    • 2016-12-27
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多