2014-11-06 24 views
6

Mam następującą funkcję, która iteruje na tablicy, wywołuje metodę dla każdego obiektu "Zwrotu", który zwraca BigDecimal, który zawiera pewną wartość, np. 20.45:Jak dodać do 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(); 
} 

Problem polega na tym, że zawsze zwraca "0.00". Wiem na pewno, że tablica, którą przekazuję, nie ma wartości null, a wartości, które zwróci jej funkcja getAmountPayable(), również nie są zerowe lub równe 0. Nie wiem, czy patrzyłem na to zbyt długo i brakuje mi tego oczywistego, jakaś pomoc byłaby bardzo doceniona.

PS - 'getAmountPayble() zwraca wartość typu BigDecimal

+0

Możesz chcieć użyć stałej [ 'BigDecimal.ZERO'] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#ZERO) –

Odpowiedz

12

Trzeba użyć wartości zwracanej add, ponieważ BigDecimal jest niezmienna. Więc chcesz:

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

(Osobiście myślę, że to byłaby bardziej oczywista, jeśli metoda została wezwana plus zamiast add, ale nie szkodzi.) Odpowiedź

+0

Doskonale, dziękuję bardzo. To był rzeczywiście problem. :) – Tiwaz89

+0

@Relborg Zaakceptuj odpowiedź w takim przypadku :) –

+0

@DanTemple Zrobisz, musisz poczekać kilka minut – Tiwaz89

0

Jon Skeet jest prawidłowe. Oto javadoc API dla BigDecimal#add:

Zwraca BigDecimal którego wartość jest (to + augend), a jego waga wynosi max (this.scale(), augend.scale()).