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...
希望这对某人有所帮助。
我在 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...
希望这对某人有所帮助。