python - .quantize() 的小数舍入不使用原始上下文

标签 python python-2.7 decimal rounding

如果我执行以下操作,我希望 0.005 向上舍入为 0.01 而不是向下舍入为 0.00,因为舍入设置为ROUND_HALF_UP

>>> import decimal
>>> currency = decimal.Context(rounding=decimal.ROUND_HALF_UP)
>>> cents = decimal.Decimal('0.00')
>>> amount = currency.create_decimal('0.005')
>>> amount
Decimal('0.005')
>>> amount.quantize(cents)
Decimal('0.00')

但是如果我将 currency 传递给 quantize(),它会正确舍入:

>>> amount.quantize(cents, context=currency)
Decimal('0.01')

为什么 amount(从 currency 上下文创建)不使用 currency 上下文进行舍入?

注意:这个问题不是问如何四舍五入到小数点后两位。我只是以此为例。我想知道为什么Context 创建的 Decimal 在量化/舍入时不使用相同的 Context .

最佳答案

Decimal 对象不保留创建它们的上下文。使用特定上下文的小数操作,例如带有上下文参数的 Context.create_decimalDecimal.quantize,只会覆盖该操作的全局上下文;对生成的 Decimal 的进一步操作是在全局上下文中完成的。

如果你想让所有操作都使用ROUND_HALF_UP,你可以设置全局上下文:

decimal.setcontext(currency)

但如果您想混合上下文,则必须为每个需要全局上下文以外的上下文的操作显式提供上下文。

关于python - .quantize() 的小数舍入不使用原始上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33678723/

相关文章:

linux - 子进程库不会执行 compgen

python-2.7 - 使用霍夫变换检测矩形。遇到此错误: 'NoneType'对象没有属性 '__getitem__'

Python打印二进制值及其十进制形式

MySQL bigint、decimal(18,0) 或 char(10) 为主

将十进制转换为字符/字符串

python - 写入数据库时​​,Python 3 中的 SQLite3 出现磁盘 I/O 错误

python - 使用 statsmodels.api 删除 const 或标签变量

使用pylint的python代码约定

python - Bokeh:如何将文件另存为 svg?

python - 如何有效地使用索引数组作为掩码将 numpy 数组转换为 bool 数组?