使用百分比和BigDecimal进行测试

4
我有两个BigDecimal变量,名为Actual和Budgeted。我将Actual除以Budgeted得到一个百分数。
但问题在于,当我创建单元测试并尝试确认结果是否为0.1时,使用equals(new BigDecimal(.1))会因为双精度浮点数的精度问题导致失败。
我的解决方法是创建两个BigDecimal称为ten和hundred,将这两个数相除,并用其进行测试。这样,我只使用固定点数,我的计算应该完全准确。
那么我的问题是:是否有更好的解决方法?
2个回答

7
使用BigDecimal时,应使用compareTo方法而非equals方法进行“数值相等性”测试:
if (bigDecimal1.compareTo(bigDecimal2) == 0) { //then they are equals

请参考javadoc获取更多信息。

正如其他人所提到的,您应该使用字符串构造函数以避免舍入问题。


4
您可以使用BigDecimal的字符串构造函数(文档):
 equals( new BigDecimal("0.1") );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接