Валюта NumberFormat меняет поведение `format` после вызова` parse` - PullRequest
1 голос
/ 27 сентября 2019

Я создаю числовой формат, чтобы не возвращать строки с десятичными числами, например:

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

1.Если я вызываю формат, он возвращает нормально

numberFormat.format(123) // "$123"

2.Если я вызываю parse с другим значением

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

3.И снова вызовите форматирование с 123, возвращаемое значение содержит десятичные дроби! формат изменился! .

numberFormat.format(123) // "$123.00"

Почему?Что мы можем сделать, чтобы он всегда возвращался с format без десятичных знаков, таких как 1. ?

Я сделал репо, чтобы воспроизвести его: https://github.com/danielgomezrico/test-numericformat-format-parse-error-sample.

Похожеэто происходит только на Android, а не в Java.

Посмотрите на MainActivity.kt

1 Ответ

1 голос
/ 27 сентября 2019

Никогда не использовал NumberFormat, поэтому я не уверен, почему это так ... но можно обойтись, сделав вашу numberFormat переменную класса с пользовательским геттером, например:

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

и затем, когда вы получите к нему доступ таким образом, он будет применять maximumFractionDigits каждый раз

...