
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)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)