1. 程式人生 > >NumberFormat、BigDecimal 不使用科學計數法

NumberFormat、BigDecimal 不使用科學計數法


    /**
     * 科學計數法
     */
    public static void scientificNotation() {
        Double num = 80000000000.000001;

        System.out.println("預設計數法:num=" + num);

        NumberFormat nf = NumberFormat.getInstance();
        nf.setGroupingUsed(false);// 不用科學計數
        System.out.println("禁用科學計數法:num=" + nf.format(num));

        // 不使用任何冪數
System.out.println("BigDecimal.toPlainString()=" + new BigDecimal(num.toString()).toPlainString()); // 有必要時使用科學計數法 System.out.println("\nBigDecimal.toString = " + new BigDecimal(num).toString()); // 有必要時使用科學計數法 System.out.println("BigDecimal.toString = " + new
BigDecimal(num.toString()).toString()); // 有必要時使用工程計數法。工程記數法是一種工程計算中經常使用的記錄數字的方法,與科學技術法類似,但要求10的冪必須是3的倍數 System.out.println("\nBigDecimal.toEngineeringString = " + new BigDecimal(num.toString()).toEngineeringString()); }
預設計數法:num=8.0E10
禁用科學計數法:num=80000000000

BigDecimal.toPlainString()=80000000000

BigDecimal.toString
= 80000000000 BigDecimal.toString = 8.0E+10 BigDecimal.toEngineeringString = 80E+9

小結:
1、double、Double是不精確的數,末尾的0.000001不見了
2、double、Double數值過大,轉換成String都會是科學計數法表示
2、new BigDecimal(num).toPlainString() 此方法能轉化為普通數字字串