Python Expressive Puzzlers 2: Time for a Change

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

這個謎題是跟浮點數(float)有關的議題。請問底下Java程式會出現什麼結果?
1
2
3
4
5
public class Change {
  public static void main(String args[]) {
    System.out.println(2.00 - 1.10);
  }
}

回答是0.9的話,是有問題的。筆者使用 JDK 10 來執行得到的結果為0.8999999999999999。這是為什麼呢?"Java Puzzlers"一書提到「not all decimals can be represented exactly using binary floating-point」也就是用2進位的表示方式無法精準地表示所有的十進位數字。Java可以用BigDecimal 犧牲效能來獲得精確的數值。
1
2
3
4
5
6
7
import java.math.BigDecimal;
public class Change {
  public static void main(String args[]) {
    System.out.println(new BigDecimal("2.00").
    subtract(new BigDecimal("1.10")));
  }
}
那 Python 的結果呢?
1
print(2.00 - 1.10)

沒有留言: