[解決済み] 浮動小数点数の四捨五入はどうすればよいですか?
2023-01-22 01:13:24
質問
の挙動がおかしいのですが。
round()
関数の奇妙な動作に直面しています。
for i in range(1, 15, 2):
n = i / 2
print(n, "=>", round(n))
このコードは印刷されます。
0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4
4.5 => 4
5.5 => 6
6.5 => 6
浮動小数点以下の数値は必ず切り上げられると思っていましたが、そうではなく、偶数番目に近い数値に丸められます。
なぜそのような動作になるのでしょうか、また、正しい結果を得るための最善の方法は何でしょうか。
私は
fractions
を使ってみましたが、結果は同じです。
どのように解決するのですか?
この 数値の種類 セクション は、この動作を明示的に文書化します。
round(x[, n])
x をn桁に丸め、半分を偶数に丸めます。nが省略された場合、デフォルトは0になります。
注意点として 半分を偶数に丸める . これはまた 銀行員丸め 常に四捨五入する(丸め誤差が大きくなる)のではなく、四捨五入することによって、最も近い であっても に丸めることで、丸め誤差を平均化することができます。
丸めの挙動をより細かく制御する必要がある場合は
decimal
モジュール
を正確に指定することができます。
の丸め方を指定できます。
.
例えば、半分から切り上げる場合。
>>> from decimal import localcontext, Decimal, ROUND_HALF_UP
>>> with localcontext() as ctx:
... ctx.rounding = ROUND_HALF_UP
... for i in range(1, 15, 2):
... n = Decimal(i) / 2
... print(n, '=>', n.to_integral_value())
...
0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] JavaScriptで浮動小数点数の精度を扱うには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonで小数点以下2桁に丸めるには?
-
[解決済み】最も近い整数に丸める
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Django filter queryset __in for *every* item in list