搜索

首页  >  问答  >  正文

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呢?

仅有的幸福仅有的幸福2713 天前1023

全部回复(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
  • 取消回复