比较由浮点数和字符串创建的 Python 小数

2024-02-10

有人能解释一下为什么下面三个例子不一切平等?

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

是否有通用的“正确”方法来创建DecimalPython 中的对象? (即作为字符串或作为浮点数)


默认情况下使用的浮点数以 2 为基数。71.6 无法以 2 为基数准确表示。(想想以 10 为基数的 1/3 之类的数字)。

因此,它们将被转换为浮点数可以表示的小数位数。因为以 2 为基数的数字 71.6 会永远持续下去,而且你几乎肯定没有无限的内存可以使用,所以计算机决定用更少的位数来表示它(好吧,被告知要这样做)。

如果您要使用字符串,程序可以使用算法来精确转换它,而不是从狡猾的四舍五入浮点数开始。

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

相比

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

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

>>> decimal.Decimal(71.5)
Decimal('71.5')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较由浮点数和字符串创建的 Python 小数 的相关文章

随机推荐