本文所有例子均基于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。
分享到:
相关推荐
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
rounded_d = d.quantize(Decimal('0.00'), rounding=decimal.ROUND_HALF_UP) print(rounded_d) # 输出:123.46 ``` 在上面的例子中,`quantize()`方法的第一个参数定义了要保留的小数位数,第二个参数指定了舍入...
formatted_decimal = num.quantize(Decimal('0.00'), rounding='ROUND_HALF_UP') print(formatted_decimal) # 输出:3.14 ``` 接下来,我们谈谈递归。递归是一种算法,它通过函数调用自身来解决问题。在Python中...
NULL 博文链接:https://sap.iteye.com/blog/295523
《MetaTrader 5 EA:基于MA_Rounding_Channel指标的突破交易系统详解》 在金融交易领域,自动交易系统,特别是外汇市场,已经成为许多交易者首选的工具。MetaTrader 5(MT5)作为一款功能强大的交易平台,为交易者...
《基于MetaTrader 5的Exp_MA_Rounding_Candle自动交易程序详解》 在金融交易领域,自动化交易系统已经成为一种趋势,MetaTrader 5(MT5)作为一款强大的交易平台,为交易者提供了丰富的工具和功能。本文将深入探讨...
《MetaTrader 5脚本:Background_MA_Rounding_Candle_HTF深入解析》 在金融交易领域,MetaTrader 5(MT5)是一个广泛使用的交易平台,它提供了丰富的技术分析工具和自定义指标,使得交易者能够根据市场数据进行复杂...
《MetaTrader 5脚本——MA_Rounding_HTF深度解析》 在金融交易领域,MetaTrader 5(MT5)是一款广泛使用的交易平台,它提供了丰富的技术分析工具和自动化交易功能。本文将深入探讨一个名为"MA_Rounding_HTF"的...
《基于MetaTrader 5的智能交易系统:Exp_MA_Rounding_Candle-MMRec EA》 在外汇交易领域,MetaTrader 5(MT5)是一个广泛使用的交易平台,它为交易者提供了丰富的工具和技术分析指标,帮助他们制定交易策略。本文将...
《MetaTrader 5脚本——MA_Rounding_Candle_HTF指标详解》 在交易领域,技术分析是投资者的重要工具,而MetaTrader 5(MT5)交易平台提供了丰富的自定义指标和脚本,帮助用户实现个性化的交易策略。本文将详细探讨...
《MetaTrader 5脚本——MA_Rounding_Channel详解》 MetaTrader 5(MT5)是全球金融市场中广泛使用的交易平台之一,它为交易者提供了丰富的技术分析工具和自动化交易功能。"MA_Rounding_Channel"是一款专为MT5设计的...
《MetaTrader 5脚本:MA_Rounding_Channel_HTF详解》 MetaTrader 5(MT5)是一款全球广泛使用的外汇交易和分析平台,它为交易者提供了丰富的技术指标和脚本,以支持复杂的交易策略。本文将深入探讨“MA_Rounding_...
### 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** - **...
Java提供了一系列的类和方法来实现不同类型的舍入操作,这些操作主要集中在`java.lang.Math`类和`java.math.RoundingMode`枚举类型中。 首先,让我们了解Java中的基本数据类型和运算符。Java提供了多种数值类型,...
货币的python模块。 该模块编译了一个包含对金融分析有用的信息的货币对象字典。 并非世界上所有货币都受支持。 欢迎您加入并添加更多。 包裹: CI: 下载: 来源: 货币对象 要使用它: >>> import ccy >>> c...
本文主要探讨了饱和(saturation)和舍入(rounding)这两种策略,以解决乘法运算后数据位宽过大的问题。 当两个定点数相乘时,其结果的位宽等于两个操作数位宽之和。例如,A的位宽是(1,7,4),B的位宽是(1,9,5),它们...
rounded_decimal = precise_num.quantize(Decimal('0.00'), rounding='ROUND_HALF_UP') print(rounded_decimal) # 输出:0.12 ``` `quantize`方法允许我们指定小数位数和舍入模式,`ROUND_HALF_UP`是常用的向上舍入...
print(Decimal('1.325').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)) ``` `quantize()`方法用于将`Decimal`对象四舍五入到指定的精度,`ROUND_HALF_UP`是四舍五入模式,确保在5时向上取整。 这种被...