Search code examples
javaintegerbigdecimal

How to convert an integer to bigdecimal in Java


I want to create a method that calculates multiplication of an integer and a bigdecimal. I search on Google and forums, but I didn't find anything.

import java.math.BigDecimal;
private Integer quantite;
private BigDecimal prixUnit;

public Integer getQuantite() {
        return quantite;
}

public void setQuantite(Integer quantite) {
    this.quantite = quantite;
}


public BigDecimal getPrixUnit() {
    return prixUnit;
}

public void setPrixUnit(BigDecimal prixUnit) {
    this.prixUnit = prixUnit;
}

public BigDecimal methCal(BigDecimal quantite, BigDecimal prixUnit) {

    this.prixUnit=prixUnit;
    BigDecimal j = new BigDecimal(quantite);
    this.j = quantite;

    return quantite*prixUnit;
}

How can I fix this?


Solution

  • To multiply an integer (or byte/short/float/double) with a BigInteger (or BigDecimal), you must convert the native number to BigInteger/BigDecimal first.

    // int parameter can be int or Integer
    public static BigInteger multiply ( int a, BigInteger b ) {
       return BigInteger.valueOf( a ).multiply( b );
    }
    
    // BigInteger <> BigDecimal
    public static BigDecimal multiply ( int a, BigDecimal b ) {
       return BigDecimal.valueOf( a ).multiply( b );
    }
    
    // same for add, subtract, divide, mod etc.
    

    Note: valueOf is not the same as new, and for different reasons on BigDecimal and BigInteger. In both cases, I recommend valueOf over new.


    I see that you added your code, nice. It doesn't work because Integer is mixed with BigDecimal, and also * does not work with BigDecimal. If you compare it with my code, the fix should be obvious:

    public BigDecimal methCal ( int quantite, BigDecimal prixUnit ) {
        return BigDecimal.valueOf( quantite ).multiply( prixUnit );
    }