[解決済み] 小数を分数に変換するには?
2023-02-14 19:23:44
質問
Pythonで小数を最小の分数に変換する方法を教えてください。
例えば
0.25 -> 1/4
0.5 -> 1/2
1.25 -> 5/4
3 -> 3/1
どのように解決するのですか?
2つのオプションがあります。
-
使用する
float.as_integer_ratio()
:>>> (0.25).as_integer_ratio() (1, 4)
(Python3.6以降では で同じことができます。
decimal.Decimal()
オブジェクト .) -
を使用します。
fractions.Fraction()
タイプ :>>> from fractions import Fraction >>> Fraction(0.25) Fraction(1, 4)
後者には、非常に便利な
str()
の変換があります。
>>> str(Fraction(0.25))
'1/4'
>>> print Fraction(0.25)
1/4
浮動小数点値は不正確な場合があるので、「奇妙な」分数になることがあります。分母を制限して分数をいくらか「単純化」するには
Fraction.limit_denominator()
:
>>> Fraction(0.185)
Fraction(3332663724254167, 18014398509481984)
>>> Fraction(0.185).limit_denominator()
Fraction(37, 200)
Python 2.6をまだ使っているのであれば
Fraction()
を渡すことはまだサポートされていません。
float
を直接渡すことはできませんが
ができます。
に上記の2つのテクニックを組み合わせます。
Fraction(*0.25.as_integer_ratio())
あるいは
Fraction.from_float()
クラスメソッド
:
Fraction.from_float(0.25)
は、本質的に同じことをします。例えば、整数の比率のタプルを取り、それを2つの別々の引数として渡します。
そして、あなたのサンプル値を使った小さなデモです。
>>> for f in (0.25, 0.5, 1.25, 3.0):
... print f.as_integer_ratio()
... print repr(Fraction(f)), Fraction(f)
...
(1, 4)
Fraction(1, 4) 1/4
(1, 2)
Fraction(1, 2) 1/2
(5, 4)
Fraction(5, 4) 5/4
(3, 1)
Fraction(3, 1) 3
という両方の
fractions
モジュールと
float.as_integer_ratio()
メソッドは Python 2.6 で新しく追加されました。
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] PyMongoで.sortを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Python Empty Generator 関数