若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
這個謎題是跟浮點數(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 的結果呢?
沒有留言:
張貼留言