kotlin rem 运算符没有给我正确答案

kotlin rem operator doesn't give me correct answer

我在 android 项目的 kotlin 代码中使用余数,但使用这个值我没有得到正确答案。

变量是:

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

它必须是 剩余 值是: 4.5363018896793506E-15

我不明白为什么会这样。

答案是因为 vv 实际上不是 1529.71,而是最接近的 Double,确切的值是 1529.71000000000000363797880709171295166015625(最简单的查看方法是 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/

在我的例子中,我只需要得到小数点后两个数字的精确数字。 我是通过这样做实现的:

val input = 30.47f
val remainder = (input * 100).toInt() - (input.toInt() * 100)
// remainder = 47 exactly, and not 469999999...

希望这对某人有所帮助。