如何解决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

回到顶部