

原因:
由于浮點數在計算機中是以二進制形式存儲的,而某些十進制小數無法精確地用二進制表示。這種問題在許多編程語言中都很常見,包括Java。
為什么會出現精度問題?
浮點數在計算機中是以 IEEE 754 標準的二進制格式存儲的。某些十進制小數(如 1.89)無法精確地表示為二進制小數,因此在存儲時會被近似表示。這種近似會導致精度誤差。
哪些數字可能會出現類似問題?
許多十進制小數在轉換為二進制時都會出現精度問題。以下是一些常見的例子:
1.89
實際存儲:1.8900000000000001
原因:1.89 無法精確表示為二進制小數。
0.1
實際存儲:0.10000000000000001
原因:0.1 無法精確表示為二進制小數。
0.2
實際存儲:0.20000000000000001
原因:0.2 無法精確表示為二進制小數。
0.3
實際存儲:0.30000000000000004
原因:0.3 無法精確表示為二進制小數。
1.1
實際存儲:1.1000000000000001
原因:1.1 無法精確表示為二進制小數。
2.3
實際存儲:2.3000000000000003
原因:2.3 無法精確表示為二進制小數。
解決辦法
BigDecimal bd = new BigDecimal(numberValue).setScale(2, BigDecimal.ROUND_HALF_UP);
double formattedNum = bd.doubleValue();
System.out.println(formattedNum);
浙公網安備 33010602011771號