Java 没有 E 表示法的 Double 到 BigDecimal 的转换

Java Double to BigDecimal Conversion Without E Notation

在 JDK8 中:

   import java.math.BigDecimal;
    public class HelloWorld{
    
         public static void main(String []args){
             Double aDouble=new Double(295699630);
            System.out.println(BigDecimal.valueOf(aDouble.doubleValue()));
           
         }
    }

给出输出:2.9569963E+8。 数字以零结尾(如 295699630,848436700)带有符号 E。 但是如果数字以任何非零数字结尾,那么上面的代码片段会给出我们想要的输出(数字如:295699631 不会转换后包含 'E')。这是什么原因 & 我们如何在这个转换中避免科学记数法 'E'? 需要以 BigDecimal 格式输出(不是字符串)没有 'E' 符号。 任何帮助将不胜感激。提前致谢。

看看 API。 BigDecimal 有一个 toPlainString 方法

Returns a string representation of this BigDecimal without an exponent field.

https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#toPlainString--

在从 Double 到 BigDecimal 的转换过程中,我们可以使用 setScale 方法来避免使用科学记数法 'E'。请遵循以下代码片段:

import java.math.BigDecimal;
    
 import org.apache.commons.lang3.math.NumberUtils;
    
    public class test {
    
        public static void main(String[] args) {
            Double aDouble = NumberUtils.createDouble("345444330");
            System.out.println(BigDecimal.valueOf(aDouble.doubleValue()));//Output:3.4544433E+8
            BigDecimal b = new BigDecimal(aDouble).setScale(2);//Output:345444330.00 
            System.out.println(b);
    
        }
    
    }