首页 > 试题广场 >

如何解释下面的执行结果? print 1.2 - 1.

[单选题]
如何解释下面的执行结果?
print 1.2 - 1.0 == 0.2
False

  • Python的实现有错误
  • 浮点数无法精确表示
  • 布尔运算不能用于浮点数比较
  • Python将非0数视为False
答案选B,因为Python 中浮点数的运算存在误差,动手实践就能得到验证,如下图所示

具体原因是1.2 - 1.0的值不是0.2,而是0.19999999999999996
发表于 2018-03-05 17:24:52 回复(7)
浮点数无法进行精确表示。第一次评论,不知道会不会有赞
发表于 2018-03-03 18:05:39 回复(2)
比较符号的优先级比加减乘除优先级要低,因此1.2-1.0会先算,但是计算出来的浮点数值不精确,与0.2可能不相等。
发表于 2018-03-04 01:51:27 回复(0)
本质原因是因为计算机底层运算的时候操作的是二进制,当带小数点的十进制转换成二进制的时候可能存在小数部分乘不尽的情况
发表于 2018-09-17 20:06:09 回复(0)
浮点数无法进行精确表示。第一次评论,不知道会不会有赞
发表于 2018-09-03 23:47:38 回复(0)
本题关键点
1. 计算加减乘除要先于比较运算(优先级问题)
所以 题目中先进行 1.2-1.0的运算
2.为Python 中浮点数无法精确表示
即1.2-1.0 不是0.2 而是
3.所以题目变成 print 0.19999999999999996 == 0.2 
自然是FALSE!
发表于 2018-06-07 16:51:01 回复(0)

浮点数无法精确表示,会有赞么

发表于 2019-06-17 14:29:26 回复(0)
发表于 2019-04-24 16:15:38 回复(0)
解决方法知道的有两个:
1:a = round(1.2*2.4, 9)
2:from decimal import Decimal
      a = Decimal('1.3') * Decimal('3.1')   # 参考https://www.jb51.net/article/120776.htm 

发表于 2018-09-02 17:28:42 回复(0)
关于c选项,布尔运算可以用于浮点数比较。
>>> 1.2==1.2
True
像这样直接比较,没有运算式,是可以比较的。
发表于 2018-09-01 22:31:08 回复(0)
这又该怎么解释,pycharm和命令提示符运行结果不一致???
发表于 2018-07-16 10:07:24 回复(2)
计算机中均无法用二进制精确存储十进制小数,故浮点数运算存在误差。
python 3.5之后,引入 math.isclose(a,b)来判断在一定的范围内,两个数是否相等,比如: math.isclose((1.2 - 1.0) , 0.2)
True
发表于 2019-09-21 20:25:11 回复(0)
部分大佬给了一些解析,我想知道为什么print时,值就变0.2了呢

发表于 2019-08-14 14:38:20 回复(0)
浮点数无法精确表示
发表于 2019-07-21 23:29:27 回复(0)

这个情况属不属于语言本身的错


发表于 2019-07-14 21:14:51 回复(0)
浮点数在小数点十几位之后有极小的误差  不能进行布尔值的比较
但是为什么0.1*2==0.2是True

发表于 2019-06-19 15:48:55 回复(1)
其实不仅是python,像java,c语言都是一样,浮点数都是无法准确计算的,这是由于计算机是二进制计算的缘故。
发表于 2019-06-16 15:01:24 回复(0)
Python中浮点数不能精确表示
发表于 2019-06-02 14:50:06 回复(0)

Python的实数计算存在不确定尾数问题,不是Python语言的错,是计算机底层设计的问题


发表于 2019-04-06 02:37:59 回复(0)

做错了。。。哎,🤣记录一下吧。

# python 2.7
print 1.2-1.0    # 0.19999999999999996

# python 3.6
print(1.2-1.0)    # 0.19999999999999996
发表于 2019-03-05 13:36:50 回复(0)