double bonusScore = 10;
if (bonusScore > 0) {
//code body
}
我想比较的奖金是双倍的0,我应该怎么做,因为如果以上述方式完成它不准确,我不知道为什么。
答案 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);
}
小心精确比较双倍。