切り上げ・切り捨ての挙動一覧
切り上げはmath.ceil()、切り捨てはmath.floor()、四捨五入はDecimalで実装することができます。
math.ceilの挙動(切り上げ)
標準ライブラリmathのceil関数を使うと切り上げの処理ができます。
小数点以下で切り上げの処理がされます。
import math
R = 1.2
round_up = math.ceil(R)
print(f"元の値:{R} 切り上げ:{round_up}")
R = 1.8
round_up = math.ceil(R)
print(f"元の値:{R} 切り上げ:{round_up}")
元の値:1.2 切り上げ:2
元の値:1.8 切り上げ:2
正負のどちらでも1つ大きい整数となります。
R = -3.5
for i in range(8):
round_up = math.ceil(R + i)
print(f"元の値:{R + i} 切り上げ:{round_up}")
元の値:-3.5 切り上げ:-3
元の値:-2.5 切り上げ:-2
元の値:-1.5 切り上げ:-1
元の値:-0.5 切り上げ:0
元の値:0.5 切り上げ:1
元の値:1.5 切り上げ:2
元の値:2.5 切り上げ:3
元の値:3.5 切り上げ:4
math.floorの挙動(切り捨て)
標準ライブラリmathのfloor関数を使うと切り捨ての処理ができます。
小数点以下で切り捨ての処理がされます。
import math
R = 1.2
round_down = math.floor(R)
print(f"元の値:{R} 切り捨て:{round_down}")
R = 1.8
round_down = math.floor(R)
print(f"元の値:{R} 切り捨て:{round_down}")
元の値:1.2 切り捨て:1
元の値:1.8 切り捨て:1
正負のどちらでも1つ小さい整数となります。
R = -3.5
for i in range(8):
round_down = math.floor(R + i)
print(f"元の値:{R + i} 切り捨て:{round_down}")
元の値:-3.5 切り捨て:-4
元の値:-2.5 切り捨て:-3
元の値:-1.5 切り捨て:-2
元の値:-0.5 切り捨て:-1
元の値:0.5 切り捨て:0
元の値:1.5 切り捨て:1
元の値:2.5 切り捨て:2
元の値:3.5 切り捨て:3
intへのキャストの挙動(切り捨て)
intへキャストすることで切り捨てと同等の処理ができます。
importの必要もなく、小数点以下で切り捨ての処理がされます。
R = 1.2
int_R = int(R)
print(f"元の値:{R} 切り捨て:{int_R}")
R = 1.8
int_R = int(R)
print(f"元の値:{R} 切り捨て:{int_R}")
元の値:1.2 切り捨て:1
元の値:1.8 切り捨て:1
intのキャストでは、整数部分がそのまま出力されます。
そのため負の数では、math.floorとは違い1つ大きい整数となります。
R = -3.5
for i in range(8):
int_R = int(R + i)
print(f"元の値:{R + i} 切り捨て:{int_R}")
元の値:-3.5 切り捨て:-3
元の値:-2.5 切り捨て:-2
元の値:-1.5 切り捨て:-1
元の値:-0.5 切り捨て:0
元の値:0.5 切り捨て:0
元の値:1.5 切り捨て:1
元の値:2.5 切り捨て:2
元の値:3.5 切り捨て:3
roundの挙動(偶数丸めの四捨五入)
組み込み関数であるround関数を使うと四捨五入の処理ができます。
R = 1.2
round_R = round(R)
print(f"元の値:{R} 四捨五入:{round_R}")
R = 1.8
round_R = round(R)
print(f"元の値:{R} 四捨五入:{round_R}")
元の値:1.2 四捨五入:1
元の値:1.8 四捨五入:2
ただ、round関数は一般的な四捨五入ではなく偶数丸めとなります。
xx.5のときには偶数になるように切り上げ・切り捨てが行われます。
R = -3.5
for i in range(8):
round_R = round(R + i)
print(f"元の値:{R + i} 四捨五入:{round_R}")
元の値:-3.5 四捨五入:-4
元の値:-2.5 四捨五入:-2
元の値:-1.5 四捨五入:-2
元の値:-0.5 四捨五入:0
元の値:0.5 四捨五入:0
元の値:1.5 四捨五入:2
元の値:2.5 四捨五入:2
元の値:3.5 四捨五入:4
また、round関数は第2引数を指定することで、四捨五入する桁を選択できます。
0を指定すると少数第1位で四捨五入をし、1,2,・・・を指定すると少数第2,3,・・・位を四捨五入します。
負の値-1,-2,・・・を指定すると、1,10,・・・の位で四捨五入します。
R = 123.456
print(f"元の値:{R} 四捨五入:{round(R, -3)}")
print(f"元の値:{R} 四捨五入:{round(R, -2)}")
print(f"元の値:{R} 四捨五入:{round(R, -1)}")
print(f"元の値:{R} 四捨五入:{round(R, 0)}")
print(f"元の値:{R} 四捨五入:{round(R, 1)}")
print(f"元の値:{R} 四捨五入:{round(R, 2)}")
print(f"元の値:{R} 四捨五入:{round(R, 3)}")
元の値:123.456 四捨五入:0.0
元の値:123.456 四捨五入:100.0
元の値:123.456 四捨五入:120.0
元の値:123.456 四捨五入:123.0
元の値:123.456 四捨五入:123.5
元の値:123.456 四捨五入:123.46
元の値:123.456 四捨五入:123.456
Decimalの挙動(一般的な四捨五入)
標準ライブラリdecimalを使うと四捨五入の処理ができます。
from decimal import Decimal, ROUND_HALF_UP
R = 1.2
rounding_off = Decimal(str(R)).quantize(Decimal("0"), rounding=ROUND_HALF_UP)
print(f"元の値:{R} 四捨五入:{rounding_off}")
R = 1.8
rounding_off = Decimal(str(R)).quantize(Decimal("0"), rounding=ROUND_HALF_UP)
print(f"元の値:{R} 四捨五入:{rounding_off}")
元の値:1.2 四捨五入:1
元の値:1.8 四捨五入:2
decimalを使うと一般的な四捨五入(4以下は切り捨て、5以上は切り上げ)を実装することができます。
R = -3.5
for i in range(8):
rounding_off = Decimal(str(R + i)).quantize(
Decimal("0"), rounding=ROUND_HALF_UP
)
print(f"元の値:{R + i} 四捨五入:{rounding_off}")
元の値:-3.5 四捨五入:-4
元の値:-2.5 四捨五入:-3
元の値:-1.5 四捨五入:-2
元の値:-0.5 四捨五入:-1
元の値:0.5 四捨五入:1
元の値:1.5 四捨五入:2
元の値:2.5 四捨五入:3
元の値:3.5 四捨五入:4
また、少数第何位で四捨五入するかも指定することができます。
ただ、整数部分を指定することはできません。
R = 123.456
rounding_off = Decimal(str(R)).quantize(
Decimal("0"), rounding=ROUND_HALF_UP
)
print(f"元の値:{R} 四捨五入:{rounding_off}")
rounding_off = Decimal(str(R)).quantize(
Decimal("0.1"), rounding=ROUND_HALF_UP
)
print(f"元の値:{R} 四捨五入:{rounding_off}")
rounding_off = Decimal(str(R)).quantize(
Decimal("0.01"), rounding=ROUND_HALF_UP
)
print(f"元の値:{R} 四捨五入:{rounding_off}")
元の値:123.456 四捨五入:123
元の値:123.456 四捨五入:123.5
元の値:123.456 四捨五入:123.46
元の値:123.456 四捨五入:123.456
参考文献
math --- 数学関数
このモジュールは、 C 標準で定義された数学関数へのアクセスを提供します。 これらの関数で複素数を使うことはできません。複素数に対応する必要があるならば、 cmath モジュールにある同じ名前の関数を使ってください。ほとんどのユーザーは複素数を理解するのに必要なだけの数学を勉強したくないので、複素数に対応した関数と対応...
Pythonで小数・整数を四捨五入するroundとDecimal.quantize | note.nkmk.me
Pythonで数値(浮動小数点数floatや整数int)を四捨五入や偶数への丸めで丸める方法について説明する。 組み込み関数round()は一般的な四捨五入ではなく偶数への丸めなので注意。一般的な四捨五入を実現するには標準 ...
コメント