如果您閱讀API文檔,您會發現使用Double.toString(double)
來設置值的格式爲String.valueOf(dobule)
。這也許並不明顯,但Double.toString(double)
舍入值,格式化爲一個字符串之前:
多少位必須打印爲m或a的小數部分? 必須至少有一位數字來表示小數部分,並且 超出這個數字的位數必須與 唯一區分參數值與類型爲 double的相鄰值所需的位數一樣多。也就是說,假設x是精確的數學值 ,用該方法對 產生的十進制表示法表示一個有限的非零參數d。那麼d必須是x的最接近 的double值;或者如果兩個雙值同樣接近x,那麼d必須是其中一個 和d的有效數的至少顯著位必須 爲0
這樣做的結果是,String.valueOf(131.7d)
將返回字符串「131.7」,即使參數的確切值是131.69999999999998863131622783839702606201171875。原因在於小數部分不能總是使用二進制分數來表示(與浮點數和雙精度一起使用)。
因此,新的new BigDecimal(String.valueOf(131.7))
將創建一個精確值爲131.7的BigDecimal。 new BigDecimal(131.7)
將創建一個精確值爲131.69999999999998863131622783839702606201171875的BigDecimal。
對於那些投票結束爲重複,那些問題是相似的,但不重複。 – Woot4Moo