python中str(x)是什么意思啊_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转换在这两个文件中的两倍之间的差异.

标签:python,string,floating-point

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值