如何添加到BigDecimal

问题描述:

我有以下函数在数组上传输,在每个返回包含某个值的BigDecimal的'Refund'对象上调用一个方法,例如20.45:如何添加到BigDecimal

private String getTransactionTotals(Refund[] refunds) { 

    BigDecimal total = new BigDecimal(0.00); 

    /* 
    * Itterates over all the refund objects and adds 
    * their amount payables together to get a total 
    */ 
    for (Refund refund : refunds) { 

     total.add(refund.getAmountPayable());   

    } 

    total = total.setScale(2, RoundingMode.CEILING); 
    return total.toString(); 
} 

问题是它总是返回'0.00'。我知道我传递的数组不是null,并且它们的'getAmountPayable()'函数返回的值也不为零或等于0.我不知道我是否一直盯着这太久了,我错过了明显的,一些帮助将不胜感激。

PS - 'getAmountPayble()返回类型为BigDecimal

+0

你可能想使用常量['BigDecimal.ZERO'(http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#ZERO) – 2014-11-06 07:08:56

您需要使用的add返回值的值,因为BigDecimal是不可改变的。所以,你想:

total = total.add(refund.getAmountPayable()); 

(我个人认为,这将是比较明显的,如果该方法被称为plus而非add,不过没关系。)

+0

完美,非常感谢。这确实是问题。 :) – Tiwaz89 2014-11-06 07:07:33

+0

@Relborg接受在这种情况下的答案:) – 2014-11-06 07:11:57

+0

@DanTemple会做,不得不等待几分钟 – Tiwaz89 2014-11-06 07:39:13

乔恩斯基特的答案是正确的。下面是BigDecimal#add的API的Javadoc:

返回BigDecimal,其值为(this +被加数),其标是为max(this.scale(),augend.scale())。