Python的默认行为str(x)

Python的默认行为str(x),第1张

概述我依赖于一些使用Decimal类的代码,因为它需要精确到一定数量的小数位.某些函数允许输入为浮点数,因为它与代码库的其他部分接口的方式.要将它们转换为十进制对象,它会使用类似的东西 mydec = decimal.Decimal(str(x)) 其中x是作为输入的浮点数.我的问题是,是否有人知道应用于浮点数的’str’方法的标准是什么? 例如,取数字2.1234512.由于表示浮动的方式,它在内部 我依赖于一些使用Decimal类的代码,因为它需要精确到一定数量的小数位.某些函数允许输入为浮点数,因为它与代码库的其他部分接口的方式.要将它们转换为十进制对象,它会使用类似的东西

mydec = decimal.Decimal(str(x))

其中x是作为输入的浮点数.我的问题是,是否有人知道应用于浮点数的’str’方法的标准是什么?

例如,取数字2.1234512.由于表示浮动的方式,它在内部存储为2.12345119999999999.

>>> x = 2.12345119999999999>>> x2.1234511999999999>>> str(x)'2.1234512'

好的,在这种情况下,str(x)正在执行类似’%.6f’%x的 *** 作.这是我的代码转换为小数的方式的问题.请考虑以下事项:

>>> d = decimal.Decimal('2.12345119999999999')>>> ds = decimal.Decimal(str(2.12345119999999999))>>> d - dsDecimal('-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转换在这两个文件中的两倍之间的差异.

总结

以上是内存溢出为你收集整理的Python的默认行为str(x)全部内容,希望文章能够帮你解决Python的默认行为str(x)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1192764.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存