Currency NumberFormat 在调用 parse 后更改了 format 行为

Currency NumberFormat change the `format` behaviour after calling `parse`

我创建了一个 numberFormat 来避免 return 带小数的字符串,例如:

val numberFormat = NumberFormat.getCurrencyInstance().apply {
    minimumFractionDigits = 0
}

1。如果我调用格式化 return 没问题

numberFormat.format(123) // "3"

2。如果我用其他值调用解析

numberFormat.parse("3") // a number -> 333

3。并用 123 再次调用格式,returned 值包含小数! 格式改变了!.

numberFormat.format(123) // "3.00"

为什么?我们能做些什么才能让 return 始终带有 format 而没有小数点,例如 1.?

我做了一个 repo 来重现它:https://github.com/danielgomezrico/test-numericformat-format-parse-error-sample

看起来它只在 android 上失败,而不是在 java 上失败。

看看MainActivity.kt

从未使用过 NumberFormat 所以我不确定为什么它会这样......但一个解决方法是使你的 numberFormat 成为一个 class 变量,并带有自定义 getter 像这样:

val numberFormat: NumberFormat
    get() = NumberFormat.getCurrencyInstance().apply { maximumFractionDigits = 0 }

然后当您以这种方式访问​​它时,它每次都会应用 maximumFractionDigits