为什么 decimal.Decimal 对象不被认为是有理数?

Why is a decimal.Decimal object not considered rational?

一个pythonDecimal存储了一个以10为底的数,可以认为是一个比率,底部是10的幂。

那为什么会失败呢?

from decimal import Decimal
from numbers import Rational

assert issubclass(Decimal, Rational)

同样的原因 float 不是 Rational:虽然 floatDecimal 的所有非无限、非 NaN 值都是有理数,但类型是有意的模拟实数运算。例如,它们支持平方根:

2.0**0.5
Decimal(2).sqrt()

class 用于模拟有理数或有理数的子集不会。

(是的,好吧,你可以做 2**0.5,但这会将 int 强制转换为 float。)