Rounding in Python

本文所有例子均基于Python 3.1.2
 
1 Overview

    首先简单介绍几种常见的舍入模式:

ROUND_CEILING : 向正无穷大(Infinity)方向舍入。
ROUND_FLOOR : 向正无穷大(–Infinity)方向舍入。
ROUND_UP : 向远离0的方向舍入。
ROUND_DOWN : 向靠近0的方向舍入。
ROUND_HALF_UP : 向最近的值舍入,如果相等则向远离0的方向舍入。
ROUND_HALF_DOWN : 向最近的值舍入,如果相等则向靠近0的方向舍入。
ROUND_HALF_EVEN : 向最近的值舍入,如果相等则向偶数方向舍入。

2 Division

    首先分析一下floor division 的例子:
>>> 5 // 2, 5.0 // 2, 5 // -2, 5.0 // -2
(2, 2.0, -3, -3.0)
    从以上例子中可以看出,跟C或者Java不同(采用ROUNDING_DOWN), Python的floor division采用的舍入模式是ROUNDING_FLOOR。
 
     需要注意的是, Python 2.5(以及之前的版本)中对于整数除法操作,总是会截取结果的小数部分;Python3.0之后,无论除数为何类型,总是保留结果的小数部分。
 
3 Conversion

    将浮点数转换为整数时,采用ROUNDING_DOWN, 例如:
>>> int(1.3), int(-1.3), int(1.5), int(-1.5), int(2.5), int(-2.5)
(1, -1, 1, -1, 2, -2)
 
4 Rounding

    如果使用内置的round函数将浮点数舍入为整数时,使用ROUNDING_HALF_EVEN,例如:
>>> round(1.3), round(-1.3), round(1.5), round(-1.5), round(2.5), round(-2.5)
(1, -1, 2, -2, 2, -2)
 
5 Decimal

    Java语言中BigDecimal默认的舍入模式是ROUNDING_UNNESSARY。Python中的Decimal计算时采用的舍入模式取决于当前的上下文。例如:
>>> import decimal
>>> decimal.getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[Overflow, InvalidOperation, DivisionByZero])
    从以上例子中可以看出,当前默认的舍入模式是ROUND_HALF_EVEN。
 
    此外, decimal模块也提供了几个预制的上下文:

BasicContext。采用ROUND_HALF_UP。
ExtendedContext。 采用ROUND_HALF_EVEN。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值