首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python (第3版)中使用十进制数的传统舍入?

如何在Python (第3版)中使用十进制数的传统舍入?
EN

Stack Overflow用户
提问于 2014-05-21 00:44:14
回答 2查看 1.1K关注 0票数 3

我正在努力弄清楚如何使用传统的方法,使用Python版本3(特别是3.4.0版)在小学和中学教授十进制数。

例如,使用十进制数0.745,我试图将其舍入到最近的百分之一。传统上,舍入值为0.75,但下面的代码给出了0.74:

代码语言:javascript
运行
复制
>>> import decimal
>>> a = decimal.Decimal("0.745")
>>> round(a, 2)
Decimal('0.74')

但是,将原始值更改为0.746似乎返回0.75:

代码语言:javascript
运行
复制
>>> import decimal
>>> b = decimal.Decimal("0.746")
>>> round(b, 2)
Decimal('0.75')

这似乎与传统的四舍五入相矛盾(如果我没记错的话)。有人能带我找到正确的Python舍入方法吗?

更新:使用所选答案的指导,以下是我的问题的完整代码解决方案:

代码语言:javascript
运行
复制
>>> import decimal
>>> decimal.getcontext().rounding = decimal.ROUND_HALF_UP
>>> a = decimal.Decimal("0.745")
>>> round(a, 2)
Decimal('0.75')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-21 00:55:27

这就是人们所期望的(也是最好的)行为:所谓的“银行家四舍五入”,它是无偏的,并将二分之一舍入至最接近的偶数整数。

你总是可以:

代码语言:javascript
运行
复制
import decimal
decimal.getcontext().rounding = decimal.ROUND_HALF_UP

请注意,ROUND_HALF_UP有偏见,这就是为什么它不是默认的。

票数 6
EN

Stack Overflow用户

发布于 2014-05-21 01:03:22

如果您知道需要达到什么样的精度,那么始终可以添加一些额外的内容来满足您的需要(而不一定是其他人所期望的):

代码语言:javascript
运行
复制
def round_my_way(dec, precision):
    dec += decimal.Decimal(1.0/10**(precision+1) / 2)
    return round(dec, precision)

print round_my_way(decimal.Decimal("0.746"), 2) # Prints 0.75
print round_my_way(decimal.Decimal("0.745"), 2) # Prints 0.75
print round_my_way(decimal.Decimal("0.744"), 2) # Prints 0.74
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23772211

复制
相关文章

相似问题

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