Python Expressive Puzzlers 2: Time for a Change

Ping-Lun Liao
2 min readAug 11, 2018

--

這個謎題是跟浮點數(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)

Originally published at yunlinsong.blogspot.com on August 11, 2018.

--

--

No responses yet