如何解决Java舍入双精度问题
似乎减法正在引发某种问题,并且结果值是错误的。
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
以上是 如何解决Java舍入双精度问题 的全部内容, 来源链接: utcz.com/qa/411134.html