今回は、数値の小数点の扱い方について、また、小数点の正確な計算ができる、decimalモジュールについて、詳しく解説していきます。
Pythonの数値型
Pythonの数値型
Pythonでは数値型として、int型(整数型)、float型(小数型)、complex型(複素数型)の3つがあります。
型は、変数に代入できるものを制限するためのものであり、浮動小数点型には浮動小数点以外代入できません。
Pythonでは、型を宣言せずに使用できることから、Pythonが型を自動的に判別してくれます。
しかし、型が合わずにエラーになることもありますから、型について知っておくとよいでしょう。
float型(小数型)
float型(小数型)
float型とは、 Python の組み込み型の1つで、浮動小数点を扱うことができます。
Pythonでは、型を宣言しないので、float型でも、そのまま記述するだけで使用できます。
他の型をfloat型に変換する場合
float( 変換したい値 )
型を確認するには、typeメソッドを使用します。
type(型を確認する対象)
float型の変数を定義し、typeメソッドで型を確認してみます。
num = 1.35
type(num)
# 実行結果:<class 'float'>
# float型を確認しました。
num2 = 5
type(num2)
# 実行結果:<class 'int'>
# int型を確認しました。
小数点の切り上げ
小数点の切り上げは、mathモジュールのceilメソッドを使用します。
import math
float_var = 1.234
print(math.ceil(float_var))
# 実行結果: 2
小数点の切り捨て
小数点の切り捨ては、mathモジュール内にfloorメソッドを使用します。
import math
float_var = 1.234
print(math.floor(float_var))
# 実行結果: 1
小数点の四捨五入(丸める)
小数点の四捨五入についてはroundメソッドを使用するのですが、実は正確には四捨五入ではありません。
roundメソッドは偶数へ丸めるという処理をする関数になります。
端数が、0.5より小さい場合、切り捨てられ、端数が0.5より大きい場合は切り上げられます。
また、端数がちょうど0.5の場合、偶数となる方へ丸められます。
float_a = 10.5
float_b = 10.6
float_c = 11.4
float_d = 11.5
print(round(float_a))
# 実行結果: 10
print(round(float_b))
# 実行結果: 11
print(round(float_c))
# 実行結果: 11
print(round(float_d))
# 実行結果: 12
roundメソッドは四捨五入としては、扱いに注意が必要です。
roundメソッドで桁を指定して丸める
roundメソッドを使って桁を指定して丸めることができます。
roundメソッドの書き方は、
(round(第1引数に丸める小数,第2引数に丸めたい桁))
となります。
(例)小数点2桁で丸める場合
print(round(4.321,2))
# 実行結果: 4.32
decimalモジュールを使う
decimalモジュールを使う
小数型をdecimalモジュールと組み合わせることで、小数型をより便利に扱うことができるようになります。
decimalモジュールとは
decimalモジュールは、Pythonで10進数が正確に扱えるようになります。
実は、Pythonのfloat型は内部で、2進数で動いています。
そのため、人に分かりやすい10進数に変換されるのですが、すると微妙に不正確な結果になることがあります。
しかし、decimalモジュールを使うことで、改善することができます。
decimalモジュールの使い方
decimalモジュールの使い方は、
- decimalモジュールをインポートします
- 有効桁数を設定します
- 数値はDecimalオブジェクトに文字列として代入します
(例)文字列に0.1を代入し計算する場合
from decimal import
getcontext().prec = 16
dec_var = Decimal("0.1")+Decimal("0.1")+Decimal("0.1")
print(dec_var)
# 実行結果: 0.3
decimalオブジェクトに代入された数字は、decimal型となり、int型とは計算することはできますが、float型とは一緒に計算できません。
decimal型を使う場合は、小数を全てdecimal型に統一する必要があります。
decimalモジュールを使わない場合
print(0.1+0.1+0.1)
# 実行結果: 0.30000000000000004
任意の桁で切り下げ、切り上げ、四捨五入
decimalモジュールのメソッドに、quantizeメソッドがあり、任意の桁で好きな形式に丸めていくことができます。
quantizeメソッドの使い方
quantizeメソッドの使い方は、Decimalオブジェクトに対してquantizeメソッドを使用します。
- 第1引数で整形したい形のDecimalオブジェクト
- 第2引数で丸めの形式オプション(省略可)
形式オプション
- 切り上げ:ROUND_UP
- 切り捨て:ROUND_DOWN
- 一般的な四捨五入:ROUND_HALF_UP
(例)小数第2位までで切り捨てる場合
Decimal('2.345').quantize(Decimal('.01'), rounding=ROUND_DOWN)
# 実行結果: Decimal('2.34')
まとめ: Python 小数点を使いこなすコツをマスターしよう!
まとめ: Python 小数点を使いこなすコツをマスターしよう!
今回は、
- Python数値型のfloat型(小数型)
- 切り上げ、切り捨ての仕方
- decimal型について
について解説しました。