有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java的余数运算符容易出现浮点错误吗?

我想为双变量num创建一个setter,但我只想在输入是0.5的倍数时更新它

以下是我的情况,但我担心浮点错误

public void setNum(double num) {
    if (num % 0.5 == 0.0) {
        this.num = num;
    }
}

我假设对于一些实际上是0.5倍的输入,它可能返回0.0000003或0.4999997,因此不是0.0

我能做些什么来补救?或者在这种情况下这不是问题吗


共 (1) 个答案

  1. # 1 楼答案

    除非你处理的是非常大的浮点数,否则你不会失去0.5的精确倍数,因为0.5完全可以用二进制表示。但是对于一个足够接近0.5的倍数的数字,你可能会发现(例如)10.500000000000000001被存储为10.5

    因此,如果num是0.5的倍数,那么(num % 0.5 == 0.0)肯定是真的,但是如果num是接近0.5倍数的数字的稍微不准确的表示,那么它也可能是真的