double d =0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.toPlainString());
打印輸出=>0.00000010
我期待0.0000001
的Java double爲BigDecimal皈依增加額外的尾隨零
double d =0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.toPlainString());
打印輸出=>0.00000010
我期待0.0000001
的Java double爲BigDecimal皈依增加額外的尾隨零
首先,要獲得精確的BigDecimal
值,避免使用float
或double
進行初始化。從文本到浮點類型的從定義上不保證是精確的。從這種類型轉換爲BigDecimal
是準確的,但可能不會完全產生您預期的結果。
如果你能避免使用double
或float
初始化,然後做這樣的事情,而不是:
BigDecimal d = new BigDecimal("0.0000001");
這已經給你所需要的輸出,因爲從(十進制)文本BigDecimal
的轉換精確。
但如果你真的必須從double
轉換,然後嘗試:
double d = 0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
System.out.println(d1.stripTrailingZeros().toPlainString());
這條(刪除)任何尾隨零。
可以使用DecimalFormat
格式化您的BigDecimal
。
double d = 0.0000001;
BigDecimal d1 = BigDecimal.valueOf(d);
DecimalFormat df = new DecimalFormat("#0.0000000");
System.out.println(df.format(d1));
但是,我如何獲得規模(即#0.0000000)形式的雙重價值,它是動態的,如果小數分數大於5在這種情況下,它將轉換爲指數 – user7951871
謝謝這對我有用 – user7951871