Kotlin число с плавающей запятой с 2 ​​десятичными знаками в строку без потери точности - PullRequest
0 голосов
/ 06 марта 2020

В Android - Kotlin Я получаю число с плавающей запятой из бэкэнда (например, num = 10000000.47). Когда я пытаюсь его преобразовать в String.format и добавить это число в мой баланс, он показывает его с показателем степени (что-то вроде 1.0E10). ).

Я хочу показать число обычно без показателя степени и с двумя десятичными знаками. (Без потери доверия!)

Пытался использовать DecimalFormat ("#. ##"), но это мне не помогло. Может я что-то не так делаю?

num = 10000000.47f
 val dec = DecimalFormat("#.##")
 var result = dec.format(num)

my result is: 10000000
It losts my decimal places

1 Ответ

0 голосов
/ 06 марта 2020

Проблема в вашем типе номера. Согласно документации :

Для переменных, инициализированных дробными числами, компилятор выводит тип Double. Чтобы явно указать тип Float для значения, добавьте суффикс f или F. Если такое значение содержит более 6-7 десятичных цифр, оно будет округлено.

В примере, показывающем, как информация может быть потеряна:

val pi = 3.14 // Double
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, actual value is 2.7182817

Если значение указано как Double вместо Float, т.е.

val num = 10000000.47

вместо

val num = 10000000.47f

тогда ваш подход работает, как и ожидалось, но может быть сокращен до:

"%.2f".format(num)

(обратите внимание, что более короткая версия также будет печатать «100» как «100,00», что отличается от вашего подхода, но потенциально все еще желаемое поведение)

Если вы получите Float от бэкэнда, то информация уже потеряна на вашей стороне. В противном случае вы сможете исправить проблему путем улучшенного анализа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...