Python 小数点を使いこなすコツをマスターしよう!

Python 小数点を使いこなすコツをマスターしよう

今回は、数値の小数点の扱い方について、また、小数点の正確な計算ができる、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型について

について解説しました。

よかったらシェアしてください!
目次