2009/11/11

Java 的浮點運算誤差

  double n = 73500.0; double result = n * 2.0 / 100.0 / 360.0 * 30.0; result = 122.49999999999; 使用 Excel, Python , gcc C 算出來都是 122.5 可惱啊 ! 雖然誤差非常小, 但遇到小數點第一位四捨五入, 卻會變成 122. 而不是 123.

浮點數型態變數只適用工程及科學計算,若是要用在商業計算上這點真的要小心。這問題也不是只有Java 程式語言才有,許多程式語言都有這問題,自己在過用上要小心。Java 可以使用 java.math.BigDecimal 來解決。