【必読】Pythonのroundと類似関数の基本・具体例・比較

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年6月)

✔以下の疑問を持つ方々に向けた記事となります

「Pythonのround関数は何に使うのだろうか?」
「Pythonのround関数の使用方法を詳しく知りたい」
「Pythonでround関数を用いた具体的な例を見てみたい」

✔当記事で解説する内容

  • Pythonのround関数の基本的な理解
  • round関数の使い方とその応用
  • round関数を用いたPythonの実例

当記事では、Pythonのround関数の基本的な使い方から、さまざまなオプションを活用した応用例まで、具体的な例を交えて詳しく解説します。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

【基本】組み込み関数round()を使う

Pythonには組み込み関数としてround()が用意されており、これを使って数値の丸め処理をおこなえます

基本から具体的な使い方まで見ていきましょう。

  • PythonのRound関数とは
  • 小数点以下を任意の桁数で丸める方法
  • 整数を任意の桁数で丸める方法
  • round()の丸め方は四捨五入?

PythonのRound関数とは

Round関数は、Pythonの組み込み関数のひとつで、特定の数値を丸める(四捨五入)場合に使います。

できることは以下のとおり。

  • 数値を指定した桁数で丸められる
  • 実数(小数)を整数に丸められる
  • 小数点以下を任意の桁数で丸められる

小数点以下を任意の桁数で丸める方法

round()関数を使って小数点以下を任意の桁数で丸めるには、丸めたい小数と丸める桁数を引数として指定します。

round(3.1415, 2)

#出力
#3.14

整数を任意の桁数で丸める方法

round()関数は整数にも使用できます。

この場合、第二引数に負の値を指定することで、整数部を任意の桁数で丸めるのです。

round(12345, -2)

#出力
#12300

12345を最も近い百の数(12300)に丸められます。

round()の丸め方は四捨五入?

round()関数の動作は、四捨五入と考えて良いでしょう。

なぜなら1.5をroundすると、2になるからです。

以下がそれぞれの動作になります。

>>> round(1.5)
2
>>> round(1.51)
2
>>> round(1.49)
1

丸めるべき数値の最も近い整数になり、中間の場合は繰り上がります。

標準ライブラリdecimalのquantize()を使う

Pythonの標準ライブラリ「decimal」には、quantize()というメソッドが含まれており、より高度な丸め処理ができるものです。

ここではその使用方法を3つの観点から見ていきます。

  • Decimalオブジェクトの作成方法
  • quantize()で小数を四捨五入・偶数へ丸める方法
  • quantize()で整数を四捨五入・偶数へ丸める方法

Decimalオブジェクトの作成方法

quantize()メソッドを使用するためには、まずdecimalモジュールのDecimalオブジェクトを作成する必要があります。

手順はこちら。

  • decimalのインポート
  • decimal.Decimal()関数に数値を文字列として渡す
>>> import decimal
>>> x = decimal.Decimal("3.1415")
>>> x
Decimal('3.1415')

quantize()で小数を四捨五入・偶数へ丸める方法

Decimalオブジェクトのquantize()メソッドを使用すると、小数を四捨五入または偶数へ丸められます。

quantize()メソッドに、丸めたい桁数をDecimalオブジェクトとして渡すのです。

また、丸め方を指定することも可能で、以下の方法があります。

  • decimal.ROUND_HALF_UP:四捨五入
  • decimal.ROUND_HALF_EVEN:偶数への丸め
import decimal

# 丸めたい値
x = decimal.Decimal("3.14159265359")

# 2桁の小数点以下で丸める
rounded = x.quantize(decimal.Decimal("0.00"))

print(rounded)  # 結果: 3.14

# 丸め方を指定して丸める
rounded_half_up = x.quantize(decimal.Decimal("0.00"), rounding=decimal.ROUND_HALF_UP)
rounded_half_even = x.quantize(decimal.Decimal("0.00"), rounding=decimal.ROUND_HALF_EVEN)

print(rounded_half_up)  # 結果: 3.14 (四捨五入)
print(rounded_half_even)  # 結果: 3.14 (偶数への丸め)

quantize()で整数を四捨五入・偶数へ丸める方法

quantize()メソッドは、整数の丸め処理にも利用することができます。

丸めたい桁数を10の倍数の形でDecimalオブジェクトとして指定する方法です。

import decimal

# 丸めたい値
x = decimal.Decimal("1234.56789")

# 指定した桁数の倍数に丸める
rounded = x.quantize(decimal.Decimal("1E+2"))

print(rounded)  # 結果: 1200.00

# 丸め方を指定して丸める
rounded_half_up = x.quantize(decimal.Decimal("1E+2"), rounding=decimal.ROUND_HALF_UP)
rounded_half_even = x.quantize(decimal.Decimal("1E+2"), rounding=decimal.ROUND_HALF_EVEN)

print(rounded_half_up)  # 結果: 1200.00 (四捨五入)
print(rounded_half_even)  # 結果: 1200.00 (偶数への丸め)

主要関数round()とquantize()の比較

ここでは、Pythonの組み込み関数round()と、標準ライブラリdecimalのquantize()メソッドの使い方について見てきました。

これら二つの関数・メソッドにはそれぞれ特性と用途があります。

以下の観点で詳しく比較していきましょう。

  • メリット・デメリット
  • 使用シーンの違い

メリット・デメリット

それぞれのメリット・デメリットを簡潔に見ておきましょう。

理解しておけば、使う場面が明確になります。

以下にround()関数とquantize()メソッドのメリット・デメリットを表にまとめました。

round()関数quantize()メソッド
メリット– 簡便でimportなど不要
– すぐに利用可能
– 丸め方を明示的に指定可能
– 誤差が発生しにくい
デメリット– 丸め方の指定不可
– 誤差が発生する可能性
– Decimalオブジェクトの作成や使用に手間

利用する場合は、丸め方や誤差の扱いなどの要件に合わせて、適切なメソッドを選択することが重要です。

使用シーンの違い

組み込み関数round()は、一般的な四捨五入や整数への丸めに対応しており、日常的なプログラミングにおける丸め処理には十分です。

しかし、商業的な計算(金融、会計など)や、精度を要する科学技術計算においては、quantize()メソッドを用いた方が適しています

その理由は、quantize()メソッドが丸め方を選択でき、浮動小数点数に起因する誤差が少ないからです。

また、quantize()メソッドは、特定の精度の計算を行う場合など、より高度な数値処理を求められる場面で活躍します。

カスタム関数の定義

ここまでで、Pythonの組み込み関数や標準ライブラリを使った丸め処理について見てきました。

しかし、これらの関数やメソッドだけでは対応できない特殊な状況に対処するためには、自分で丸め処理を行う関数を定義することもあります。

  • 小数を任意の桁数で四捨五入する関数の作成
  • 整数を任意の桁数で四捨五入する関数の作成
  • 注:負の値における注意事項

小数を任意の桁数で四捨五入する関数の作成

Pythonでは、defキーワードを用いて自分だけの関数を定義できます。

例えば小数を任意の桁数で四捨五入する関数を以下のように定義しましょう。

def my_round(num, digit):
    p = 10 ** digit
    return (num * p * 2 + 1) // 2 / p

この関数では、引数として丸めたい数値(num)と丸める桁数(digit)を受け取り、その数値を10のdigit乗倍してから2で割った値を四捨五入します。

整数を任意の桁数で四捨五入する関数の作成

同様に、整数を任意の桁数で四捨五入する関数も定義することができます。

この場合は、10の倍数を利用します。以下にその一例を示します。

def my_int_round(num, digit):
    p = 10 ** (-digit)
    return (num * p * 2 + 1) // 2 / p

注:負の値における注意事項

ここで定義したカスタム関数は、正の数値に対して適切に動作しますが、負の数値に対しては期待する結果を返さない場合があります。

なぜならPythonの仕様で、’//’ 演算子が切り捨て除算をおこなうためです。

例えば、-1.5を整数に丸めるとき、’//’ 演算子は-2を返しますが、通常の四捨五入では-1が期待されます。

これを解決するには、負の値に対しては符号を反転させた上で丸めを行い、再度符号を反転させるといった工夫が必要です。

まとめ

Pythonで数値を丸める方法にはいくつかあり、それぞれに特性と適用するべきシーンがあります。

以下では、今回学んだ内容をまとめ、さらなる学習のためのステップを示します。

  • Pythonの組み込み関数round():一般的な四捨五入や整数への丸めに便利
  • decimalモジュールのquantize()メソッドは丸め方を明示的に指定でき、小数点の精度も保持するため、精度が保てる

Pythonには、数値の丸め処理以外にも、様々な数値処理を行う関数やモジュールがあります。

例えば、mathモジュールには数学的な計算(三角関数、指数・対数関数など)を行う関数が含まれています。

また、numpyやpandasといったライブラリを用いれば、より高度な数値処理やデータ分析を行うことが可能です。

これからも学習を続けて、Pythonのスキルを磨いていきましょう。

タイトルとURLをコピーしました