浮點運算(IEEE 754)

今天又碰到這個問題(是人家的錯),寫下來跟大家分享一下。

double d1 = 0.6L;
String s1 = “0.6”;
BigDecimal bd1 = new BigDecimal(d1);
BigDecimal bd2 = new BigDecimal(s1);
System.out.println(bd1);
System.out.println(bd2);

其實基本上不只 ,使用浮點運算的平台都會有這個問題。主因是二進位數字系統並不能完全表示十進位數字(大約值等於 0.5999…. 吧),要精準度高就不能用 double 而使用其他特別類別或函式庫,如 BigDecimal(如以上程式碼所示)或 GMP (C/C++)。

但以上的程式碼一早就轉成了 double,所以結果一樣會未如預期。

Leave a Reply

Your email address will not be published. Required fields are marked *