gpt4 book ai didi

python - 比较从 float 和字符串创建的 Python Decimals

转载 作者:太空狗 更新时间:2023-10-30 02:19:08 25 4
gpt4 key购买 nike

有人可以解释为什么以下三个例子不是都一样吗?

ipdb> Decimal(71.60) == Decimal(71.60)
True
ipdb> Decimal('71.60') == Decimal('71.60')
True
ipdb> Decimal(71.60) == Decimal('71.60')
False

在 Python 中是否有一种通用的“正确”方法来创建 Decimal 对象? (即,作为字符串或 float )

最佳答案

默认情况下使用的 float 以 2 为基数。71.6 无法以 2 为基数准确表示。(想想像 1/3 这样的数字以 10 为基数)。

因此,它们将被转换为 float 可以表示的小数位数。因为以 2 为基数的数字 71.6 会永远持续下去,而且您几乎可以肯定没有无穷无尽的内存可以玩,所以计算机决定(嗯,被告知)用更少的位数来表示它。

如果您改用字符串,程序可以使用算法对其进行精确转换,而不是从不可靠的四舍五入 float 开始。

>>> decimal.Decimal(71.6)
Decimal('71.599999999999994315658113919198513031005859375')

相比于

>>> decimal.Decimal("71.6")
Decimal('71.6')

但是,如果您的数字可以精确表示为 float ,则它与字符串一样准确

>>> decimal.Decimal(71.5)
Decimal('71.5')

关于python - 比较从 float 和字符串创建的 Python Decimals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32053647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com