如何将长变量与Java中的数字数字进行比较

时间:2017-11-03 08:07:23

标签: java

 double bonusScore = 10;

 if (bonusScore > 0) {
//code body
}

我想比较的奖金是双倍的0,我应该怎么做,因为如果以上述方式完成它不准确,我不知道为什么。

3 个答案:

答案 0 :(得分:1)

在java中,我们在比较浮点数时需要小心。例如:

3.9000000000000004         // expect 3.9
4.440892098500626E-16      // expect 0

我已经输出了:

bonusScore

很明显,我们必须将它们与允许的容差进行比较。在这里,我们需要将0.00001与容差if (bonusScore > 0.00001) 进行比较:

class Example1_StringFormat {
 string template = $"{0} - {1}";

 public string FormatExample1() {
   string some1 = "someone";
   return string.Format(template, some1, "inplacesomethingelse");
 }

 public string FormatExample2() {
   string some2 = "someoneelse";
   string thing2 = "somethingelse";
   return string.Format(template, some2, thing2);
 }
}

我读过关于浮点数的非常有用的article。希望这有帮助。

答案 1 :(得分:0)

定义一个非常接近于零的epsilon。然后你得到max(bonusScore,epsilon)。如果此最大值返回epsilon的值,则bonusscore非常接近于零。请记住从您的奖金分数中删除任何迹象。

答案 2 :(得分:0)

对于非精确比较:

你需要知道你的epsilon(相等的度量)并比较那样:

public static boolean equals(double x, double y, double epsilon){
    return Math.abs(x-y) < epsilon;
}

进行精确比较 尝试较低级别的东西:

public static boolean equals(double x, double y) {
    return Double.doubleToLongBits(x) == Double.doubleToLongBits(y);
}

小心精确比较双倍。