1. 程式人生 > >Python Expressive Puzzlers 2: Time for a Change

Python Expressive Puzzlers 2: Time for a Change

Python Expressive Puzzlers 2: Time for a Change

這個謎題是跟浮點數(float)有關的議題。請問底下Java程式會出現什麼結果?

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 犧牲效能來獲得精確的數值。

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 的結果呢?

print(2.00–1.10)