首页 > 解决方案 > 为什么模块超过1.0e+18会报错

问题描述

为什么模块超过1.0e+18会报错?

from decimal import Decimal

M = 1.0e+18

print(M)

M = float(Decimal(M).quantize(Decimal("1E-10"),rounding="ROUND_HALF_UP"))

print(M)

错误:

InvalidOperation: [<class 'decimal.InvalidOperation'>]

标签: pythondecimal

解决方案


与其他操作不同,如果量化操作后的系数长度大于精度,则会发出 InvalidOperation 信号。这保证了,除非存在错误条件,否则量化的指数总是等于右手操作数的指数。

此外,与其他操作不同,量化永远不会发出 Underflow 信号,即使结果不正常且不精确。

如果第二个操作数的指数大于第一个操作数的指数,则可能需要舍入。在这种情况下,舍入模式由给定的舍入参数确定,否则由给定的上下文参数确定;如果两个参数都没有给出,则使用当前线程上下文的舍入模式。


推荐阅读