2012-10-17 17 views
34

Come si moltiplica un BigDecimal di un intero in Java? Ho provato questo, ma non è corretto.Come moltiplicare un BigDecimal con un numero intero in Java

import java.math.BigDecimal; 
import java.math.MathContext; 

public class Payment { 
    int itemCost; 
    int totalCost = 0; 

    public BigDecimal calculateCost(int itemQuantity,BigDecimal itemPrice){ 
     itemCost = itemPrice.multiply(itemQuantity); 
     totalCost = totalCost + itemCost; 
    return totalCost; 
    } 
+3

Quale problema vuoi arrivare? –

+0

Suppongo che sia l'errore di compilazione poiché "moltiplica" richiede un altro "BigDecimal"? –

+0

Come fai a sapere che non è corretto? –

risposta

61

Hai un sacco di tipo-discordanze nel codice come ad esempio cercando di mettere un valore int in cui è richiesto BigDecimal. La versione corretta del codice:

public class Payment 
{ 
    BigDecimal itemCost = BigDecimal.ZERO; 
    BigDecimal totalCost = BigDecimal.ZERO; 

    public BigDecimal calculateCost(int itemQuantity, BigDecimal itemPrice) 
    { 
     itemCost = itemPrice.multiply(new BigDecimal(itemQuantity)); 
     totalCost = totalCost.add(itemCost); 
     return totalCost; 
    } 
} 
+0

Heh. Avevo ragione riguardo al costruttore 'BigDecimal (int)'. : P –

+2

L'utilizzo di 'BigDecimal.valueOf (itemQuantity)', anziché il costruttore, riuserà BigDecimals da zero a dieci, evitando la probabile costruzione di nuovi oggetti. – chrsalln

2

Prima di tutto, BigDecimal.multiply() restituisce un BigDecimal e si sta cercando di memorizzare che in un int.

In secondo luogo, lo richiede un altro BigDecimal come argomento, non uno int.

Se si utilizza semplicemente lo BigDecimal per tutte le variabili coinvolte in questi calcoli, dovrebbe funzionare correttamente.

3

Se fossi in te, vorrei impostare la scala del BigDecimal in modo che io non finiscono sui numeri lunghi. Il numero intero 2 dell'inizializzazione BigDecimal in basso imposta la scala.

Dato che si ha un sacco di disallineamento del tipo di dati, l'ho modificato di conseguenza.

class Payment 
{ 
     BigDecimal itemCost=new BigDecimal(BigInteger.ZERO, 2); 
     BigDecimal totalCost=new BigDecimal(BigInteger.ZERO, 2); 

    public BigDecimal calculateCost(int itemQuantity,BigDecimal itemPrice) 
     { 
      BigDecimal itemCost = itemPrice.multiply(new BigDecimal(itemQuantity)); 
      return totalCost.add(itemCost); 
     } 
    } 

BigDecimals sono oggetto, non primitive, quindi assicuratevi di inizializzare itemCost e totalCost, altrimenti si può dare nullpointer mentre si tenta di aggiungere o totalCostitemCost

+0

+1 per enfatizzare il problema della scala. Mentre ci sei, tieni presente che la tua moltiplicazione finirà con 'itemCost' con una scala di' 4', non '2':" Restituisce un BigDecimal il cui valore è (questo × multiplicando), e la cui scala è (this.scale() + multiplicand.scale()) "https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#multiply-java.math.BigDecimal- – pyb

Problemi correlati