2017-05-02 63 views

回答

1

首先,要獲得精確的BigDecimal值,避免使用floatdouble進行初始化。從文本到浮點類型的從定義上不保證是精確的。從這種類型轉換爲BigDecimal是準確的,但可能不會完全產生您預期的結果。

如果你能避免使用doublefloat初始化,然後做這樣的事情,而不是:

BigDecimal d = new BigDecimal("0.0000001"); 

這已經給你所需要的輸出,因爲從(十進制)文本BigDecimal的轉換精確。

但如果你真的必須double轉換,然後嘗試:

double d = 0.0000001; 
BigDecimal d1 = BigDecimal.valueOf(d); 
System.out.println(d1.stripTrailingZeros().toPlainString()); 

這條(刪除)任何尾隨零。

+0

謝謝這對我有用 – user7951871

0

可以使用DecimalFormat格式化您的BigDecimal

double d = 0.0000001; 
BigDecimal d1 = BigDecimal.valueOf(d); 
DecimalFormat df = new DecimalFormat("#0.0000000"); 
System.out.println(df.format(d1)); 
+0

但是,我如何獲得規模(即#0.0000000)形式的雙重價值,它是動態的,如果小數分數大於5在這種情況下,它將轉換爲指數 – user7951871