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 上失败。
从未使用过 NumberFormat
所以我不确定为什么它会这样......但一个解决方法是使你的 numberFormat
成为一个 class 变量,并带有自定义 getter 像这样:
val numberFormat: NumberFormat
get() = NumberFormat.getCurrencyInstance().apply { maximumFractionDigits = 0 }
然后当您以这种方式访问它时,它每次都会应用 maximumFractionDigits
我创建了一个 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 上失败。
从未使用过 NumberFormat
所以我不确定为什么它会这样......但一个解决方法是使你的 numberFormat
成为一个 class 变量,并带有自定义 getter 像这样:
val numberFormat: NumberFormat
get() = NumberFormat.getCurrencyInstance().apply { maximumFractionDigits = 0 }
然后当您以这种方式访问它时,它每次都会应用 maximumFractionDigits