我有两个 BigDecimals Actual 和 Budgeted。我将实际除以预算得出一个百分比。
我遇到的问题是,当我正在构建一些单元测试时,我试图确认生成的 BigDecimal 是 .1,但是当 try equals(new BigDecimal(.1)) 由于双精度问题而失败时。
我想克服这个问题的方法是创建两个 BigDecimal - 十和一百,将这两个除以进行测试。这样,我只使用定点数,我的计算应该准确无误。
所以我的问题是:有没有更好的方法来做到这一点?
我有两个 BigDecimals Actual 和 Budgeted。我将实际除以预算得出一个百分比。
我遇到的问题是,当我正在构建一些单元测试时,我试图确认生成的 BigDecimal 是 .1,但是当 try equals(new BigDecimal(.1)) 由于双精度问题而失败时。
我想克服这个问题的方法是创建两个 BigDecimal - 十和一百,将这两个除以进行测试。这样,我只使用定点数,我的计算应该准确无误。
所以我的问题是:有没有更好的方法来做到这一点?
使用 BigDecimal 时,您应该使用compareTo
方法而不是equals
方法进行“数字相等”测试:
if (bigDecimal1.compareTo(bigDecimal2) == 0) { //then they are equals
参看。javadoc了解更多信息。
正如其他人所提到的,您应该使用字符串构造函数来避免舍入问题。
您可以使用BigDecimal
( docu ) 的字符串构造函数:
equals( new BigDecimal("0.1") );