kotlin оператор rem не дает мне правильный ответ - PullRequest
0 голосов
/ 14 марта 2020

Я использую остаток внутри своего кода с kotlin в android проекте, но с этим значением я не получаю правильный ответ.

переменная:

 val vv = 1529.71
 val ratio = 0.01
 val remainder = vv.rem(ratio)

это должно быть ноль , но остаток значение: 4.5363018896793506E-15

Я не понимаю, почему это произошло.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Ответ заключается в том, что vv на самом деле не 1529,71, а самое близкое из возможных Double, точное значение составляет 1529,7100000000000363797880709171295166015625 (самый простой способ увидеть это println(java.math.BigDecimal(vv))). Если вы хотите точно представить десятичные числа, используйте BigDecimal и передайте дробь в виде строки:

val vv = BigDecimal("1529.71")
val ratio = BigDecimal("0.01")
val remainder = vv.rem(ratio)

Подробнее о числах с плавающей запятой здесь: https://floating-point-gui.de/

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

Если у вас есть целые числа, вывод также будет int. Здесь у вас есть числа с плавающей точкой, так что ваш вывод тоже с плавающей точкой. Смотрите здесь: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/rem.html

Если вы хотите дать 0 в выводе, попробуйте это:

val vv =1529.71
val ratio = 0.01
val remainder = vv.rem(ratio)
println("${remainder.toInt()}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...