Conversion from exponential form to decimal in Java

前端 未结 9 1111
夕颜
夕颜 2020-12-09 06:50

I want to convert exponential to decimal. e.g. 1.234E3 to 1234.

9条回答
  •  情深已故
    2020-12-09 07:17

    While working with Doubles and Long numbers in Java you will see that most of the value are displayed in Exponential form.

    For Example: In following we are multiplying 2.35 with 10000 and the result is printed.

    //Division example
    Double a = 2.85d / 10000;
    System.out.println("1. " + a.doubleValue());
    
    //Multiplication example
    a = 2.85d * 100000000;
    System.out.println("2. " + a.doubleValue());
    

    Result:

    1. 2.85E-4
    2. 2.85E8

    Thus you can see the result is printed in exponential format. Now you may want to display the result in pure decimal format like: 0.000285 or 285000000. You can do this simply by using class java.math.BigDecimal. In following example we are using BigDecimal.valueOf() to convert the Double value to BigDecimal and than .toPlainString() to convert it into plain decimal string.

    import java.math.BigDecimal;
    //..
    //..
    
    //Division example
    Double a = 2.85d / 10000;
    System.out.println("1. " + BigDecimal.valueOf(a).toPlainString());
    
    //Multiplication example
    a = 2.85d * 100000000;
    System.out.println("2. " + BigDecimal.valueOf(a).toPlainString());
    

    Result:

    1. 0.000285
    2. 285000000

    The only disadvantage of the above method is that it generates long strings of number. You may want to restrict the value and round off the number to 5 or 6 decimal point. For this you can use java.text.DecimalFormat class. In following example we are rounding off the number to 4 decimal point and printing the output.

    import java.text.DecimalFormat;
    //..
    //..
    
    Double a = 2.85d / 10000;
    DecimalFormat formatter = new DecimalFormat("0.0000");
    System.out.println(formatter .format(a));
    

    Result:

    0.0003

    I have just tried to compress this code with one line, it will print value of 'a' with two decimal places:

    new DecimalFormat("0.00").format(BigDecimal.valueOf(a).toPlainString());
    

    Happy Converting :)

提交回复
热议问题