【问题标题】:kotlin rem operator doesn't give me correct answerkotlin rem 运算符没有给我正确的答案
【发布时间】:2020-03-14 05:51:55
【问题描述】:

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

变量是:

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

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

我不明白为什么会这样。

【问题讨论】:

    标签: kotlin floating-point operators precision


    【解决方案1】:

    答案是因为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/

    【讨论】:

    • 感谢您建议的链接,我不知道。我很快就会尝试..
    【解决方案2】:

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

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

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2021-10-25
      • 1970-01-01
      相关资源
      最近更新 更多