首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python十进制奇怪句柄和如何得到最接近的小数点浮点数?

python十进制奇怪句柄和如何得到最接近的小数点浮点数?
EN

Stack Overflow用户
提问于 2018-11-16 01:02:16
回答 1查看 40关注 0票数 1

奇怪的结果是

代码语言:javascript
复制
In [46]: Decimal(1.1).quantize(Decimal('.1'), rounding=ROUND_UP)
Out[46]: Decimal('1.2')

In [47]: Decimal(1.1).quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Out[47]: Decimal('1.1')

In [48]: Decimal(3.65).quantize(Decimal('.1'), rounding=ROUND_UP)
Out[48]: Decimal('3.7')

In [49]: Decimal(3.65).quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Out[49]: Decimal('3.6')

但我想要这个:

代码语言:javascript
复制
In [47]: Decimal(1.1).quantize(Decimal('.1'), rounding=Somthing)
Out[47]: Decimal('1.1')

In [48]: Decimal(3.65).quantize(Decimal('.1'), rounding=Somthing)
Out[48]: Decimal('3.7')

这意味着我想得到最接近的浮标。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-16 01:22:14

问题是您要将float值输入到Decimal,这会导致浮点精度错误。输入字符串可以消除以下问题:

代码语言:javascript
复制
print(Decimal(str(1.1)).quantize(Decimal('.1'), rounding=ROUND_UP))

Decimal('1.1')

print(Decimal(str(3.65)).quantize(Decimal('.1'), rounding=ROUND_UP))

Decimal('3.7')

具体而言,我们发现:

代码语言:javascript
复制
Decimal(1.1) == Decimal('1.100000000000000088817841970012523233890533447265625')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53329999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档