似乎减法正在触发某种问题,结果值是错误的.
double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;
Run Code Online (Sandbox Code Playgroud)
78.75 = 787.5*10.0/100d
double netToCompany = targetPremium.doubleValue() - tempCommission;
Run Code Online (Sandbox Code Playgroud)
708.75 = 787.5 - 78.75
double dCommission = request.getPremium().doubleValue() - netToCompany;
Run Code Online (Sandbox Code Playgroud)
877.8499999999999 = 1586.6 - 708.75
由此产生的预期值为877.85.
应该怎样做才能确保正确计算?
Java中两个double值的简单比较会产生一些问题.让我们考虑Java中的以下简单代码片段.
package doublecomparision;
final public class DoubleComparision
{
public static void main(String[] args)
{
double a = 1.000001;
double b = 0.000001;
System.out.println("\n"+((a-b)==1.0));
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎返回true,表达式的评估((a-b)==1.0)却没有.它会返回,false因为对此表达式的求值0.9999999999999999实际上是预期的1.0,1.0因此不等于,因此条件求值为boolean false.克服这种情况的最佳方法是什么?