似乎减法正在引发某种问题,并且结果值是错误的。
double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;
78.75 = 787.5 * 10.0 / 100d
double netToCompany = targetPremium.doubleValue() - tempCommission;
708.75 = 787.5-78.75
double dCommission = request.getPremium().doubleValue() - netToCompany;
877.8499999999999 = 1586.6-708.75
最终的期望值为877.85。
应该怎么做才能确保计算正确?
要控制浮点算术的精度,应使用java.math.BigDecimal。阅读John Zukowski的《需要BigDecimal》以获取更多信息。
给定您的示例,最后一行将使用BigDecimal如下。
import java.math.BigDecimal; BigDecimal premium = BigDecimal.valueOf("1586.6"); BigDecimal netToCompany = BigDecimal.valueOf("708.75"); BigDecimal commission = premium.subtract(netToCompany); System.out.println(commission + " = " + premium + " - " + netToCompany);
结果为以下输出。
877.85 = 1586.6 - 708.75