web-dev-qa-db-fra.com

Comment multiplier un BigDecimal par un entier dans Java

Comment multiplier un BigDecimal par un entier en Java? J'ai essayé cela mais ce n'est pas correct.

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;
   }
50
Adesh

Vous avez beaucoup de types-mismatches dans votre code, par exemple essayer de mettre une valeur intBigDecimal est requis. La version corrigée de votre code:

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;
    }
}
79
Juvanis

Si j'étais vous, je réglerais l'échelle du BigDecimal pour que je ne finisse pas avec de longs chiffres. Le nombre entier 2 dans l'initialisation BigDecimal ci-dessous définit l'échelle.

Étant donné que vous avez de nombreux types de données incompatibles, je les ai modifiés en conséquence.

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); 
       }
  }

Les BigDecimals sont des objets, pas des primitives, alors assurez-vous d’initialiser itemCost et totalCost, sinon cela peut vous donner nullpointer pendant que vous essayez d’ajouter sur totalCost ou itemCost

3
Jimmy

Tout d’abord, BigDecimal.multiply() renvoie un BigDecimal et vous essayez de le stocker dans un int.

Deuxièmement, il prend un autre BigDecimal comme argument, pas un int.

Si vous utilisez simplement le BigDecimal pour toutes les variables impliquées dans ces calculs, cela devrait fonctionner correctement.

2
paxdiablo