Python

Pythonで四捨五入や切り捨て切り上げをして数値を丸める方法

By 2021年5月19日No Comments

この記事では、Pythonで数値を四捨五入したり偶数に丸めるround( )関数や

float型である小数点を切り上げるceil( )関数や切り捨てるfloor( )やint( )関数の使い方について解説していきます。「丸める」というのは「四捨五入」と基本的に同じ意味になります。

Pythonのround( )関数による数値の丸め方について

round( )関数は整数や小数点を引数に指定した桁数で丸めることができます。構文は下記になります。

round(数値, 桁数)

第2引数の桁数を指定せずに第1引数のみを指定した場合は小数点を丸めて整数を返します。

print(round(1.4))
print(round(1.5))

結果:

1
2

第二引数に小数点を何桁まで丸めるかを指定します。

print(round(1.5648, 1))
print(round(1.5648, 2))
print(round(1.5648, 3))

結果:

1.6
1.56
1.565

このように指定した桁数で小数点が丸められることがわかります。

引数に負の数を指定した場合、-1では10の位が丸められて-2では100の位が丸められます。

print(round(14.5648, -1))
print(round(150.5648, -2))

結果:

10.0
200.0

ただし、round( )関数は「2.5」などの数値を四捨五入しようとすると偶数の方に丸めるので一般的な四捨五入と異なる数値を返します。

print(round(2.5))
print(round(4.5))
print(round(6.5))

結果:

2
4
6

本来は一般的な四捨五入としては「3」「5」「7」となりますが「2」「4」「6」が出力されました。このようにround( )関数は整数の数値が偶数で小数点が5の場合は結果が偶数となる方へ丸められます。

Pythonで小数点の切り捨てと切り上げをする方法

Pythonで小数点の数値の切り上げや切り捨てにはmathモジュールを使います。まずは、mathモジュールをインポートします。

import math 

mathモジュールのfloor( )関数を使うと小数点を切り捨てることができます。構文は下記になります。

math.floor(小数点)

import math
print(math.floor(1.5))
print(math.floor(-1.5))

結果:

1
-2

小数点以下の切り捨てはint( )関数を使うこともできます。

print(int(1.5))

結果:

1

このように、float型である小数点の切り捨てにはfloor( )関数やint( )関数を使う事ができます。

mathモジュールのceil( )関数を使うと小数点の切り上げができます。構文は下記になります。

math.ceil(小数点)

print(math.ceil(1.5))
print(math.ceil(-1.5)

結果:

2
-1

このように、Pythonで小数点以下の切り上げにはceil( )関数を使うことができます。

Pythonで一般的な四捨五入をする方法

Pythonでdecimalモジュールを使うと一般的な0.5未満を切り捨てて、0.5以上を切り上げる四捨五入をすることができます。decimalモジュールを使って四捨五入するにはDecimalクラスとROUND_HALF_UPクラスもインポートします。

from decimal import Decimal, ROUND_HALF_UP

Decimalクラスのquantize( )関数の第一引数に四捨五入する桁数を指定して第二引数のrounding属性にROUND_HALF_UPを指定すると四捨五入をすることができます。さらに正確に四捨五入するにはstr( )を使って数値を文字列にする必要があります。構文は下記になります。

Decimal(str(数値)).quantize(Decimal(‘桁数’), rounding=ROUND_HALF_UP)

from decimal import Decimal, ROUND_HALF_UP
print(Decimal(str(3.335)).quantize(Decimal('0'), rounding=ROUND_HALF_UP))
print(Decimal(str(3.335)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP))
print(Decimal(str(3.335)).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))

結果:

3
3.3
3.34

Decimal( )クラスの引数に指定した桁数で四捨五入することができました。

Decimal( )の引数にstr( )を指定せずに小数であるfloat型を指定すると数値によっては異なる出力結果を返してしまいます。

print(Decimal(3.335).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))
print(Decimal(str(3.335)).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))

結果

3.33
3.34

このように違う結果を返しました。これは2進数と10進数の違いが関係しています。コンピューター内部では2進数で数値が扱われていますが、我々の知る一般的な四捨五入は10進数で表現されています。

Decimalクラスの引数に小数点であるfloat型を指定することで実際にどのような値として扱われているかが分かります。

print(Decimal(3.335))

結果:

3.33499999999999996447286321199499070644378662109375

このように、引数で指定した3.335とは違う数値が返されているのが分かります。

まとめ

Pythonのround( )関数を使って数値の丸める方法や一般的な四捨五入をするのに必要なdecimalモジュールを使いました。

さらに、mathモジュールを使ってfloat型である小数の切り上げにceil( )関数使い、切り捨てはfloar( )関数とint( )関数を使う事ができました。以上、Pythonでの四捨五入や数値の切り捨て切り上げの方法についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト

HOSL

Author HOSL

More posts by HOSL