早知道在java中,浮点运算会出现不精确的情况。解决方案是BigDecimal类。今天发现个问题:
System.out.println(2-1.1);//0.8999999999999999
System.out.println(2.0-0.9);//1.1
只要没有整数位的都会出现问题?Why?
原因在於浮點數由兩部分組成:指數和尾數,浮點數轉換成二進制後,並且參與了計算,那麼轉換的過程就會變得不可預知,並且變得不可逆你提到的第二個情況只是碰巧在轉換過程中沒有發現精度丟失
這個問題不只java有,其他語言也有這種狀況吧。
原因在於浮點數由兩部分組成:指數和尾數,浮點數轉換成二進制後,並且參與了計算,那麼轉換的過程就會變得不可預知,並且變得不可逆
你提到的第二個情況只是碰巧在轉換過程中沒有發現精度丟失
這個問題不只java有,其他語言也有這種狀況吧。