我依赖于一些使用 Decimal 类的代码,因为它需要精确到一定数量的小数位。一些函数允许输入是浮点数,因为它与代码库的其他部分接口的方式。要将它们转换为十进制对象,它使用类似的东西
mydec = decimal.Decimal(str(x))
其中 x 是作为输入的浮点数。我的问题是,有谁知道应用于浮动的“str”方法的标准是什么?
例如,取数字 2.1234512。由于浮点数的表示方式,它在内部存储为 2.12345119999999999。
>>> x = 2.12345119999999999
>>> x
2.1234511999999999
>>> str(x)
'2.1234512'
好的,在这种情况下,str(x) 正在执行类似 '%.6f' % x 的操作。这是我的代码转换为小数的方式的问题。采取以下措施:
>>> d = decimal.Decimal('2.12345119999999999')
>>> ds = decimal.Decimal(str(2.12345119999999999))
>>> d - ds
Decimal('-1E-17')
因此,如果我有浮点数 2.12345119999999999,并且我想将它传递给 Decimal,那么使用 str() 将其转换为字符串会得到错误的答案。我需要知道 str(x) 确定格式的规则是什么,因为我需要确定是否需要重写此代码以避免此错误(请注意,它可能没问题,因为,对于例如,一旦我们有一个小数对象,代码可能会四舍五入到小数点后 10 位)
python的文档中必须有一些规则,希望这里有人可以指出我。谢谢!