Python的默认行为str(x)
我依赖于一些使用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的文档中必须有一些规则,希望有人可以指点我.谢谢! 解决方法
在Python源代码中,查看“Include / floatobject.h”.字符串转换的精度在评论后从顶部设置几行,并对选项进行了一些解释:
/* The str() precision PyFloat_STR_PRECISION is chosen so that in most cases,the rounding noise created by various operations is suppressed,while giving plenty of precision for practical use. */ #define PyFloat_STR_PRECISION 12 如果您需要不同的东西,您可以选择重建.任何更改都将更改浮点数和复数的格式.请参阅./Objects/complexobject.c和./Objects/floatobject.c.此外,您可以比较repr和str转换在这两个文件中的两倍之间的差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |