2016-05-14 49 views
1

有沒有一種方法可以從沒有指數的BigDecimal中獲得雙倍的?從沒有指數的bigdecimal得到double值

例如:我有一個new BigDecimal("123456797676.897")

,如果我打印new BigDecimal("123456797676.897").toString()它正確地打印爲123456797676.897

現在假設如果我嘗試打印new BigDecimal("123456797676.897").doubleValue(),它將以指數形式打印,如1.23456797676897E11

有沒有什麼辦法可以得到雙指數的雙值。

謝謝:)

+0

指數只是一個格式化的問題。如果您不喜歡雙面打印的方式,請查看DecimalFormat。 –

+0

DecimalFormat將以字符串格式返回,如果將其轉換爲Double,則它將以指數形式出現。如果你知道某種方式只是用例子來解釋。這將有所幫助。 – Beginner

+0

指數僅**表示它是如何顯示的,在默認值不適合的任何上下文中,可以並應該使用DecimalFormat進行控制。雙數的內部表示與基數10指數沒有任何關係。 –

回答

1

下面的程序演示,這些都是完全相同的雙:

new BigDecimal("123456797676.897").doubleValue() 
123456797676.897 
1.23456797676897E11 
12.3456797676897E10 

Double toString方法具有挑每個值的一個表示。對於大於10的數字,它使用小數點前一位數的指數表示法。這是一個普遍合理的選擇,但並不總是正確的選擇。如果您希望在沒有指數的情況下使用DecimalFormat。如果你只是使用這個數字,Double的toString是否會用指數顯示它並沒有什麼區別,你也不需要做任何事情。

import java.math.BigDecimal; 

public class Test { 
    public static void main(String[] args) { 
    double doubleValue = new BigDecimal("123456797676.897").doubleValue(); 
    double simpleLiteral = 123456797676.897; 
    double exponent11Literal = 1.23456797676897E11; 
    double exponent10Literal = 12.3456797676897E10; 

    System.out.println(doubleValue == simpleLiteral); 
    System.out.println(doubleValue == exponent11Literal); 
    System.out.println(doubleValue == exponent10Literal); 
    } 
} 

輸出:

true 
true 
true