Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 483
ema Avatar asked Apr 16 '18 09:04

ema


2 Answers

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 );
}
like image 85
Sheepy Avatar answered Sep 16 '22 15:09

Sheepy


Google definitely could have helped you, if you know what to look for:

https://docs.oracle.com/javase/9/docs/api/java/math/BigDecimal.html#BigDecimal-int-

This is one of the constructors for BigDecimal, which allows you to do the following:

BigDecimal five = BigDecimal.valueOf(5);
BigDecimal seven = BigDecimal.valueOf(2).add(five);

Seeing as you stated you wanted to multiply an int and a BigDecimal, this would be achieved as follows:

BigDecimal result = yourBigDecimal.multiply(BigDecimal.valueOf(yourInt));

And, supposing you want this result as an int:

int intResult = result.intValue();

Keep in mind that this throws away the fraction though. If you want rounding instead:

int intResult = result.round(0, RoundingMode.HALF_UP).intValue();
like image 29
Jeroen Steenbeeke Avatar answered Sep 17 '22 15:09

Jeroen Steenbeeke