为什么比较两个属性类型`float`和`int`与相同的值在Python中得到`False`?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么比较两个属性类型`float`和`int`与相同的值在Python中得到`False`?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1839字,纯文字阅读大概需要3分钟。
内容图文
![为什么比较两个属性类型`float`和`int`与相同的值在Python中得到`False`?](/upload/InfoBanner/zyjiaocheng/781/de10be7a36864b40b5902c854251c9c8.jpg)
参见英文答案 > Is floating point math broken? 28个
我们来考虑下面的代码
码:
#!/usr/bin/env python
class Foo():
def __init__(self, b):
self.a = 0.0
self.b = b
def count_a(self):
self.a += 0.1
foo = Foo(1)
for i in range(0, 15):
foo.count_a()
print "a =", foo.a, "b =", foo.b, '"a == b" ->', foo.a == foo.b
输出:
a = 0.2 b = 1 "a == b" -> False
a = 0.4 b = 1 "a == b" -> False
a = 0.6 b = 1 "a == b" -> False
a = 0.8 b = 1 "a == b" -> False
a = 1.0 b = 1 "a == b" -> True
a = 1.2 b = 1 "a == b" -> False
a = 1.4 b = 1 "a == b" -> False
a = 1.6 b = 1 "a == b" -> False
a = 1.8 b = 1 "a == b" -> False
a = 2.0 b = 1 "a == b" -> False
a = 2.2 b = 1 "a == b" -> False
a = 2.4 b = 1 "a == b" -> False
a = 2.6 b = 1 "a == b" -> False
a = 2.8 b = 1 "a == b" -> False
a = 3.0 b = 1 "a == b" -> False
但是,如果我将第11行的代码更改为foo = Foo(2),则输出将变为:
a = 0.2 b = 2 "a == b" -> False
a = 0.4 b = 2 "a == b" -> False
a = 0.6 b = 2 "a == b" -> False
a = 0.8 b = 2 "a == b" -> False
a = 1.0 b = 2 "a == b" -> False
a = 1.2 b = 2 "a == b" -> False
a = 1.4 b = 2 "a == b" -> False
a = 1.6 b = 2 "a == b" -> False
a = 1.8 b = 2 "a == b" -> False
a = 2.0 b = 2 "a == b" -> False *
a = 2.2 b = 2 "a == b" -> False
a = 2.4 b = 2 "a == b" -> False
a = 2.6 b = 2 "a == b" -> False
a = 2.8 b = 2 "a == b" -> False
a = 3.0 b = 2 "a == b" -> False
你会看到输出a = 2.0 b = 2“a == b” – >虚假是完全奇怪的.我想我可能会误解Python中的一些OOP概念.请向我解释为什么会发生意外输出以及如何解决这个问题.
解决方法:
这与对象方向无关 – 它与计算机在内部表示浮点数的方式以及舍入错误有关.
http://floating-point-gui.de/basic/
这里的Python特性是浮点数的默认字符串表示形式,它将在小于小写位置的位置进行舍入,而不是用于漂亮打印的内部表示.
虽然对于需要正确比较的人来说,尊重浮点数的规模,Python已经引入了一个很好的机制PEP 485,它将math.isclose函数添加到标准库中.
内容总结
以上是互联网集市为您收集整理的为什么比较两个属性类型`float`和`int`与相同的值在Python中得到`False`?全部内容,希望文章能够帮你解决为什么比较两个属性类型`float`和`int`与相同的值在Python中得到`False`?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。