2017-03-16 9 views
1

Python Decimalは、基数10の数値を格納します。これは、底の10の累乗を持つ比率と考えることができます。decimal.Decimalオブジェクトが理にかなっていないのはなぜですか?

これはなぜ失敗するのですか?

from decimal import Decimal 
from numbers import Rational 

assert issubclass(Decimal, Rational) 
+0

'assert'は失敗します。なぜそれが 'Rational'のサブクラスではないのかは異なる質問です。 – DyZ

+0

10進数のドキュメントを見ていると、私はこのモジュールが私の知る限りの分数ではない丸めをしていることがわかります。 –

答えて

2

同じ理由floatRationalない:float又はDecimalのすべての非無限大、非NaN値が合理的であるが、タイプは実数演算をモデル化することを意図しています。例えば、彼らは平方根をサポートしています。クラスは有理数または有理数のサブセットではないだろうをモデル化することを目的と

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

。 Decimal`は `Rational`のサブクラスではない`ので

(はい、大丈夫、あなたが2**0.5を行うことができますが、それはfloatにint型を強制します。)

+0

私の間違いは、「合理的な数を保存する」と「合理的な操作だけをサポートする」という混乱を招いています。 – Eric

関連する問題