python3用负ndigit取整十进制数,结果是使用科学记数法的十进制数

2024-10-01 00:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到在使用带负舍入因子的^{}函数和^{}模块时出现了一个奇怪的行为。在

我使用的是Python 3(特别是3.6.3,但我不知道具体的次要版本是否对本例有影响)。在

使用float它看起来正常:

>>> round(10000 / 3, 2)
3333.33
>>> round(10000 / 3, 1)
3333.3
>>> round(10000 / 3, 0)
3333.0
>>> round(10000 / 3, -1)
3330.0
>>> round(10000 / 3, -2)
3300.0

{cd7>使用科学的四舍五入法修正结果:

^{pr2}$

我的快速解决方法是在结果中添加0,这样可以将符号恢复为“正常”(非科学):

>>> round(Decimal('10000') / 3, -1) + 0
Decimal('3330')
>>> round(Decimal('10000') / 3, -2) + 0
Decimal('3300')

我不认为这是一个bug,因为只有符号而不是实际值会受到影响,但这对我来说还是很奇怪的。在

有人知道我为什么会看到这种行为吗?你知道这是故意的还是一个小错误?在


Tags: 模块方法函数版本错误符号科学float
1条回答
网友
1楼 · 发布于 2024-10-01 00:16:50

这是正常的,也是有意的。Decimal跟踪有效数字,十进制repr用于保留有效数字。Decimal('3.3E+3')有两个有效数字,而{}有四个有效数字。在

相关问题 更多 >