搜尋

首頁  >  問答  >  主體

python中eval的問題

#如圖,Python2.7在使用eval計算浮點數表達式的時候,

eval('0.3-0.1==0.2')  # 输出为False
eval('%d - %d == %d'%(0.3, 0.1, 0.2))  # 输出为True
eval('%s - %s == %s'%(0.3, 0.1, 0.2))  # 输出为False
eval('%s - %s == %s'%('0.3', '0.1', '0.2'))  # 输出为False

這就讓人特別疑惑了,網路上沒找到答案,請高手指導!


更新:

還有個問題請教下,
a=0.3-0.1,print(a)輸出0.19999999999999998;b=0.2,
但是print('%s==%s'%(a,b) )卻輸出的是0.2==0.2,
這裡為什麼在格式化字串的時候,a由0.19999999999999998變成了0.2呢?

仅有的幸福仅有的幸福2757 天前1054

全部回覆(3)我來回復

  • phpcn_u1582

    phpcn_u15822017-06-22 11:54:25

    一般在計算機裡不能直接用 == 比較2個浮點數是否相等。

    因為浮點數值在計算機上存在誤差。

    python有 decimalfraction 2個模組用來進行高精度浮點計算。


    範例

    >>> from fractions import Fraction
    >>> Fraction('0.3')-Fraction('0.1') == Fraction('0.2')
    True
    >>> from decimal import Decimal
    >>> Decimal('0.3')-Decimal('0.1') == Decimal('0.2')
    True
    >>> 

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-06-22 11:54:25

    這和eval沒什麼關係,主要是精度問題,這個在所有的程式語言都會遇到,你試試0.3-0.1 == 0.2 都會直接返回False. 百度JavaScript 0.2-0.1問題,然後看一下《計算機組成原理》最開始的數據表示。

    https://stackoverflow.com/que... 這個是 一個高票答案。

    回覆
    0
  • 为情所困

    为情所困2017-06-22 11:54:25

    雷雷

    回覆
    0
  • 取消回覆