2016-03-27 7 views

答えて

3

the documentationから:

注によるバイナリ浮動小数点との通常の問題(Floating Point Arithmetic: Issues and Limitationsを参照)に、Fraction(1.1)への引数は11/10に正確に等しいではない、とそうFraction(1.1)ませないリターンFraction(11, 10)こと期待できるように。 (ただし、以下のlimit_denominator()メソッドのドキュメントを参照してください)

基本的に2.6は、バイナリで正確に表現することはできません。上記の抜粋の「Issues and Limitations」リンクは、さらに詳細に説明されています。

>>> from fractions import Fraction 
>>> Fraction(2.6) 
Fraction(5854679515581645, 2251799813685248) 
>>> Fraction(2.6).limit_denominator(100) 
Fraction(13, 5) 

また、あなたは(あなたがすでに発見されているように見える)文字列の入力を使用することができます。

として、あなたはここに助けるためにlimit_denominator()を使用することができ、提案しました。

+0

限界分母法は必ずしも問題を解決するとは限らず、不正確な結果をもたらすこともあります。例えば。 'Fraction(2.36)'は大きな整数を返し、 'Fraction(2.36).limit_denominator(10)'は 'Fraction(19,8)'を返します。最も近い部分は59/25です。どのように分母の最大限度を知ることになっていますか?あるいは、限界の良い範囲/見積もりは何ですか? – lapin

+1

それは正しいです。 "分母の最大限度はどのように知っていますか?"私のアドバイスは、引数を文字列に変換することで問題を回避することです(例えば 'Fraction(str(2.36))')。しかし、これは必ずしも機能しません。いくつかの値は単に分数で正確に表現することはできません。あなたの分母の制限を、引数の桁数のオーダーに設定すると、基数10で作業していると仮定すると大丈夫です。 '2.36'には3桁の数字が含まれているので、' 10 ** 3'あなたの分母の限界として。 – Chris

+0

10 ** 2になりませんか? 236/1? – lapin

関連する問題