Проблема в вашем типе номера. Согласно документации :
Для переменных, инициализированных дробными числами, компилятор выводит тип 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
от бэкэнда, то информация уже потеряна на вашей стороне. В противном случае вы сможете исправить проблему путем улучшенного анализа.