![](/img/trans.png)
[英]How to convert number value representing eg percents, currency to string and back to BigDecimal by using DecimalFormat
[英]Strange BigDecimal value using DecimalFormat
我正在嘗試使用DecimalFormat將一些字符串值轉換為數字。 我嘗試以更好的方式向您解釋我的問題:
我有以下方法:
private BigDecimal loadBigDecimal(String value){
BigDecimal bigDecimalToReturn = null;
DecimalFormat df = new DecimalFormat("##.###");
bigDecimalToReturn = new BigDecimal(df.parse(value).doubleValue());
return bigDecimalToReturn;
}
現在,如果我嘗試運行該方法:
BigDeciaml dec = myObject.loadBigDecimal("120,11");
dec的值為120.1099999999999994315658113919198513031005859375
。 為什么十進制格式會更改我的值的小數位數?
您正在轉換成雙倍和倒退。 這是不必要的,並且會導致舍入錯誤。 您應該使用以下代碼:
private BigDecimal loadBigDecimal(String value) throws ParseException {
DecimalFormat df = new DecimalFormat("##.###");
df.setParseBigDecimal(true);
return (BigDecimal) df.parse(value);
}
雙打只是近似值。 這是正確的兩倍。 如果需要特定的比例,則需要在BigDecimal構造函數中進行說明。
那是由於df.parse(value).doubleValue()
調用。 此時,該值將轉換為雙精度。
double表示正或負2的冪的和(正和負指數)。
一個人可以將120寫成64 + 32 + 16 + 8。
但是,不能將0.11寫成2的冪的有限和。
因此有一個近似值。
0.1099999999999994315658113919198513031005859375
這是2的冪的和。
就像BigDecimal一樣,它是一個帶有parameter字符串的構造函數 。 也許您可以使用它。
BigDecimal dec = new BigDecimal("120,11");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.