Java浮點數運算為何不精確:0.3 – 0.2 為什么不等于 0.1?

Java浮點數運算為何不精確:0.3 – 0.2 為什么不等于 0.1?

Java浮點數精度陷阱:看似簡單的0.1

在Java開發中,我們經常用double類型處理小數。但看似簡單的浮點數運算,卻可能導致精度丟失。本文分析為什么直接打印0.1d看似精確,而0.3d – 0.2d的結果卻與預期不符。

示例代碼中,我們聲明一個double變量f,并賦值為0.1d。然后分別打印f的值和0.3d – 0.2d的結果。表面上看,f的值是0.1,沒問題。然而,0.3d – 0.2d的結果卻并非精確的0.1。這是因為浮點數在計算機中的存儲機制。

計算機使用二進制存儲數據,而許多十進制小數(例如0.1)無法精確地轉換成二進制數,而是無限循環的二進制小數。這類似于十進制無法精確表示三分之一(1/3 = 0.3333…)。由于計算機存儲空間有限,只能截斷這個無限循環的二進制數,從而造成精度損失。這就是0.3d – 0.2d結果與預期略有偏差的原因。

立即學習Java免費學習筆記(深入)”;

因此,如果程序對精度要求很高(例如金融計算),不應直接使用double或Float進行運算。 BigDecimal類是更好的選擇,因為它能精確表示十進制數,避免了二進制浮點數表示帶來的精度損失。

以上就是Java浮點數運算為何不精確:0.3 – 0.2

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享