`
whitesock
  • 浏览: 483816 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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。
1
0
分享到:
评论

相关推荐

    python3.6.5参考手册 chm

    What’s New in Python What’s New In Python 3.6 Summary – Release highlights New Features PEP 498: Formatted string literals PEP 526: Syntax for variable annotations PEP 515: Underscores in ...

    Python库 | trytond_account_cash_rounding-5.8.2-py3-none-any.whl

    python库,解压后可用。 资源全名:trytond_account_cash_rounding-5.8.2-py3-none-any.whl

    python 实现四舍五入功能

    rounded_d = d.quantize(Decimal('0.00'), rounding=decimal.ROUND_HALF_UP) print(rounded_d) # 输出:123.46 ``` 在上面的例子中,`quantize()`方法的第一个参数定义了要保留的小数位数,第二个参数指定了舍入...

    python保留两位小数-python接口自动化测试-18-了解递归.ev4.rar

    formatted_decimal = num.quantize(Decimal('0.00'), rounding='ROUND_HALF_UP') print(formatted_decimal) # 输出:3.14 ``` 接下来,我们谈谈递归。递归是一种算法,它通过函数调用自身来解决问题。在Python中...

    Rounding Profile简介

    NULL 博文链接:https://sap.iteye.com/blog/295523

    Exp_MA_Rounding_Channel - MetaTrader 5EA.zip

    《MetaTrader 5 EA:基于MA_Rounding_Channel指标的突破交易系统详解》 在金融交易领域,自动交易系统,特别是外汇市场,已经成为许多交易者首选的工具。MetaTrader 5(MT5)作为一款功能强大的交易平台,为交易者...

    Exp_MA_Rounding_Candle - MetaTrader 5EA.zip

    《基于MetaTrader 5的Exp_MA_Rounding_Candle自动交易程序详解》 在金融交易领域,自动化交易系统已经成为一种趋势,MetaTrader 5(MT5)作为一款强大的交易平台,为交易者提供了丰富的工具和功能。本文将深入探讨...

    Background_MA_Rounding_Candle_HTF - MetaTrader 5脚本.zip

    《MetaTrader 5脚本:Background_MA_Rounding_Candle_HTF深入解析》 在金融交易领域,MetaTrader 5(MT5)是一个广泛使用的交易平台,它提供了丰富的技术分析工具和自定义指标,使得交易者能够根据市场数据进行复杂...

    MA_Rounding_HTF - MetaTrader 5脚本.zip

    《MetaTrader 5脚本——MA_Rounding_HTF深度解析》 在金融交易领域,MetaTrader 5(MT5)是一款广泛使用的交易平台,它提供了丰富的技术分析工具和自动化交易功能。本文将深入探讨一个名为"MA_Rounding_HTF"的...

    Exp_MA_Rounding_Candle_MMRec - MetaTrader 5EA.zip

    《基于MetaTrader 5的智能交易系统:Exp_MA_Rounding_Candle-MMRec EA》 在外汇交易领域,MetaTrader 5(MT5)是一个广泛使用的交易平台,它为交易者提供了丰富的工具和技术分析指标,帮助他们制定交易策略。本文将...

    MA_Rounding_Candle_HTF - MetaTrader 5脚本.zip

    《MetaTrader 5脚本——MA_Rounding_Candle_HTF指标详解》 在交易领域,技术分析是投资者的重要工具,而MetaTrader 5(MT5)交易平台提供了丰富的自定义指标和脚本,帮助用户实现个性化的交易策略。本文将详细探讨...

    MA_Rounding_Channel - MetaTrader 5脚本.zip

    《MetaTrader 5脚本——MA_Rounding_Channel详解》 MetaTrader 5(MT5)是全球金融市场中广泛使用的交易平台之一,它为交易者提供了丰富的技术分析工具和自动化交易功能。"MA_Rounding_Channel"是一款专为MT5设计的...

    MA_Rounding_Channel_HTF - MetaTrader 5脚本.zip

    《MetaTrader 5脚本:MA_Rounding_Channel_HTF详解》 MetaTrader 5(MT5)是一款全球广泛使用的外汇交易和分析平台,它为交易者提供了丰富的技术指标和脚本,以支持复杂的交易策略。本文将深入探讨“MA_Rounding_...

    Lerner -- Python Workout. 50 Essential Exercises -- 2020.pdf

    ### Python Workout: 50 Essential Exercises (2020) #### Overview The "Python Workout: 50 Essential Exercises" is a comprehensive guide designed to help... - Handling rounding issues. 37. **Menu** - **...

    Rounding:舍入程序

    Java提供了一系列的类和方法来实现不同类型的舍入操作,这些操作主要集中在`java.lang.Math`类和`java.math.RoundingMode`枚举类型中。 首先,让我们了解Java中的基本数据类型和运算符。Java提供了多种数值类型,...

    ccy:货币的python模块

    货币的python模块。 该模块编译了一个包含对金融分析有用的信息的货币对象字典。 并非世界上所有货币都受支持。 欢迎您加入并添加更多。 包裹: CI: 下载: 来源: 货币对象 要使用它: >>> import ccy >>> c...

    DSP硬件实现的优化(八)— saturation, rounding的原理和实现

    本文主要探讨了饱和(saturation)和舍入(rounding)这两种策略,以解决乘法运算后数据位宽过大的问题。 当两个定点数相乘时,其结果的位宽等于两个操作数位宽之和。例如,A的位宽是(1,7,4),B的位宽是(1,9,5),它们...

    关于Python中浮点数精度处理的技巧总结

    rounded_decimal = precise_num.quantize(Decimal('0.00'), rounding='ROUND_HALF_UP') print(rounded_decimal) # 输出:0.12 ``` `quantize`方法允许我们指定小数位数和舍入模式,`ROUND_HALF_UP`是常用的向上舍入...

    python3 小数位的四舍五入(用两种方法解决round 遇5不进)

    print(Decimal('1.325').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) ``` `quantize()`方法用于将`Decimal`对象四舍五入到指定的精度,`ROUND_HALF_UP`是四舍五入模式,确保在5时向上取整。 这种被...

Global site tag (gtag.js) - Google Analytics