比较浮点值会在java中产生意外结果

时间:2015-07-01 14:39:56

标签: java decimal

我正在执行浮动值比较......并在下面的程序中。这是一个非常基本的..在比较期间有一些十进制长度的技巧。 请帮我理解这一点。

+(dat$a > dat$high_cutoff | dat$b > dat$high_cutoff)
# [1] 0 1 0 1 0

结果:pi大于3

然后我从所有三个值中删除了最后一位数字(9)

class C
{
    public static void main(String args[])
    {
        Float pi = new Float(3.13999999f);
        if (pi > 3.13999999) {
             System.out.print("pi is bigger than 3. ");
        }
        else if (pi < 3.13999999){
            System.out.print("pi is less than 3. ");
        }
    }
}

现在的结果是:pi小于3

1 个答案:

答案 0 :(得分:2)

当然结果出人意料。你不应该/不能进行精确的浮动比较。

通常情况下,如果你想比较两个浮动值(A和B),你可以得到差异A-B,然后将它与可接受的误差进行比较(假设为0.00001)。

另一种方法是使用Float.compareTo(Float)方法。

    Float pi = new Float(3.139999f);
    int result = pi.compareTo(new Float(3.139999f));

    if (result == 0) {
        System.out.println("they are equal");
    } else {
        System.out.println("something went wrong");
    }

输出:

they are equal
相关问题