Problem mit der Auswertung in Python
仅有的幸福
仅有的幸福 2017-06-22 11:52:25
0
3
1038

Wie in der Abbildung gezeigt, wenn Python2.7 eval verwendet, um Gleitkommaausdrücke zu berechnen,

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

Das ist sehr verwirrend. Ich kann die Antwort nicht online finden.


Update:

Ich habe noch eine Frage:
a=0,3-0,1, print(a) gibt 0,19999999999999998 aus; b=0,2,
aber print('%s==%s'%(a,b)) gibt 0,2 ==0,2 aus
Warum ändert sich beim Formatieren der Zeichenfolge von 0,19999999999999998 auf 0,2?

仅有的幸福
仅有的幸福

Antworte allen(3)
phpcn_u1582

一般在计算机里不能直接用 == 比较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
>>> 
仅有的幸福

这和eval没什么关系,主要是精度问题,这个在所有的编程语言都会遇到,你试试 0.3-0.1 == 0.2 都会直接返回False. 百度 JavaScript 0.2-0.1问题,然后看一下《计算机组成原理》最开始的 数据表示。

https://stackoverflow.com/que... 这个是 一个高票回答。

为情所困
eval('0.3-0.1==0.2')  # 输出为False, 是因为0.3-0.1=0.19999999999999998
eval('%d - %d == %d'%(0.3, 0.1, 0.2))  # 输出为True, 是因为你%d传入是整数,相当于0-0=0
eval('%s - %s == %s'%(0.3, 0.1, 0.2))  # 输出为False, 参考1
eval('%s - %s == %s'%('0.3', '0.1', '0.2'))  # 输出为False, 参考1
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage