how to convert integer to bigdecimal in java

前端 未结 4 587
醉梦人生
醉梦人生 2020-12-09 14:46

I want to create a method that caculates multiplication an integer and a bigdecimal. I search on google and forums nothing I found.

import java.math.BigDecim         


        
相关标签:
4条回答
  • 2020-12-09 14:53

    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 );
    }
    
    0 讨论(0)
  • 2020-12-09 14:58

    Try this:

    import java.math.*;
    
    public class calculator{
    
        public static void main(String[] args) {
    
            BigDecimal value1 = new BigDecimal("3383878445");
            BigDecimal returnValue = calculation(2,value1);
            System.out.println("value is :" + returnValue);
        }
    
       public static BigDecimal calculation(int no1, BigDecimal no2){
            BigDecimal value = BigDecimal.valueOf(no1).multiply(no2);
            return value;
        }
    }
    
    0 讨论(0)
  • 2020-12-09 15:01

    These methods from the Java API will be helpful.

    public BigDecimal multiply​(BigDecimal multiplicand)
    

    Returns a BigDecimal whose value is (this × multiplicand), and whose scale is (this.scale() + multiplicand.scale()).

    Parameters: multiplicand - value to be multiplied by this BigDecimal. Returns: this * multiplicand

    public BigDecimal​(int val)
    

    Translates an int into a BigDecimal. The scale of the BigDecimal is zero.

    Parameters: val - int value to be converted to BigDecimal.

    0 讨论(0)
  • 2020-12-09 15:09

    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();
    
    0 讨论(0)
提交回复
热议问题