如果超过13,Python会隐藏浮点小数吗?

2024-04-18 12:50:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一些计算,得到了这样的结果:

newInteger = 200
newFloat = 200.0

if newInteger >= newFloat:
    print "Something"

当我运行应用程序时,它不会打印出来,但是当我在pythonshell上测试它时,它会打印Something!!。你知道吗

所以我测试这个

>>> number = 200.0000000000001
>>> number
200.0000000000001

但当小数超过13时,就像这样:

>>> number = 200.00000000000001
>>> number
200.0

python是否隐藏了十进制数,但显示为四舍五入?在调试时,了解结果非常重要。你知道吗

有什么办法我能得到整数吗?(我确实查阅了python文档,它没有提到任何关于打印实际浮点数的内容。)


Tags: 文档应用程序number内容if整数somethingprint
2条回答

这叫做浮点舍入误差。它与Python如何存储float(二进制)有关,这使得float不可能有100%的精度。你知道吗

更多信息请参见docs。你知道吗

如果需要更高的精度,请参阅^{}模块。你知道吗

如果您只想快速比较两个数字,有几个技巧可以用于浮点比较。最常用的方法之一是将相对误差与机器精度(epsilon)进行比较:

import sys

def float_equality(x, y, epsilon=sys.float_info.epsilon):
    return abs(x - y) <= epsilon * max(abs(x), abs(y))

但这也不是完美的。有关此方法的缺陷和一些更精确的替代方法的讨论,请参见article about comparing floats。你知道吗

Python倾向于舍入数字:

>>> math.pi
3.141592653589793
>>> "{0:.50f}".format(math.pi)
'3.14159265358979311599796346854418516159057617187500'
>>> "{0:.2f}".format(math.pi)
'3.14'

然而,浮点数有一个特定的精度,你不能超过它。不能以浮点形式存储任意数字:

>>> number = 200.00000000000001
>>> "{:.25f}".format(number)
'200.0000000000000000000000000'

对于整数,浮点限制为2**53:

>>> 2.0**53
9007199254740992.0
>>> 2.0**53 + 1
9007199254740992.0
>>> 2.0**53 + 2
9007199254740994.0

如果要存储任意十进制数,应使用十进制模块:

>>> from decimal import Decimal
>>> number = Decimal("200.0000000000000000000000000000000000000000001")
>>> number
Decimal('200.0000000000000000000000000000000000000000001')

相关问题 更多 >