小数点以下の取り扱い
前回、並列処理で複数の処理を行い、グローバル変数で特定の処理の終了により他の処理を終了させる方法を紹介しました。
今回は小数から整数に変更する際の小数点以下の取り扱い(切り捨て、四捨五入、切り上げ、切り下げ)を紹介します。
このことが気になったのは何気なくfloat型の値をint型にしたときのこと。
勝手に四捨五入されるだろうと思って実行してみたら、何と全部切り捨てになってしまいました。
ということで切り捨てにするには、逆に切り上げにするには、または四捨五入するにはどうしたらいいのか一度まとめてみようと思ったのが今回の話の発端です。
今回は切り捨てられるだろう値(1.1)、四捨五入したら切り捨てられるだろう値(1.4)、四捨五入したら切り上げられるだろう値(1.5)、切り上げれるだろう値(1.9)の4種類の値とさらにそれらのマイナスの値4種類の計8種類の値を実際に変換して、どうなるのか試してみます。
それでは始めていきましょう。
float→int:切り捨て
まずは一番最初に試しそうなfloat型の値をint型にしてみましょう。
float_11 = 1.1
float_14 = 1.4
float_15 = 1.5
float_19 = 1.9
print(int(float_11))
print(int(float_14))
print(int(float_15))
print(int(float_19))
print(int(-float_11))
print(int(-float_14))
print(int(-float_15))
print(int(-float_19))
実行結果
1
1
1
1
-1
-1
-1
-1
float型をint型に変換すると全ての小数点以下の値が切り捨てられました。
float→round:絶対値の値に対して四捨五入
float型の値を整数にするには「round(float型の値)」も使用できます。
この場合、それぞれの値はこんな感じに変換されます。
float_11 = 1.1
float_14 = 1.4
float_15 = 1.5
float_19 = 1.9
print(round(float_11))
print(round(float_14))
print(round(float_15))
print(round(float_19))
print(round(-float_11))
print(round(-float_14))
print(round(-float_15))
print(round(-float_19))
実行結果
1
1
2
2
-1
-1
-2
-2
絶対値の値に対して四捨五入されたので、より近い整数の値に収束すると覚えておくといいでしょう。
float→math.ceil:切り上げ
floatの値を切り上げるにはmathモジュールの「ceil」を用います。
使い方はmathモジュールをインポートして、「math.ceil(floatの値)」です。
import math
float_11 = 1.1
float_14 = 1.4
float_15 = 1.5
float_19 = 1.9
print(math.ceil(float_11))
print(math.ceil(float_14))
print(math.ceil(float_15))
print(math.ceil(float_19))
print(math.ceil(-float_11))
print(math.ceil(-float_14))
print(math.ceil(-float_15))
print(math.ceil(-float_19))
実行結果
2
2
2
2
-1
-1
-1
-1
全ての値が切り上げられるため、数値として大きい方、つまり正の整数であっても、負の整数であっても整数値として一つ大きい値が出力されます。
float→math.floor:切り下げ
floatの値を切り下げる、つまり常に低い整数値へ変換するにはmathモジュールの「floor」を用います。
使い方はmathモジュールをインポートして、「math.floor(floatの値)」です。
import math
float_11 = 1.1
float_14 = 1.4
float_15 = 1.5
float_19 = 1.9
print(math.floor(float_11))
print(math.floor(float_14))
print(math.floor(float_15))
print(math.floor(float_19))
print(math.floor(-float_11))
print(math.floor(-float_14))
print(math.floor(-float_15))
print(math.floor(-float_19))
実行結果
1
1
1
1
-2
-2
-2
-2
全て切り下げられ、低い方の整数値へと変換されます。
こんな感じでfloat型の値、つまり小数の値を整数に変換することができますが、それぞれ出力が異なるので注意が必要ということです。
特にfor文で繰り返し処理する場合とかrange関数で値のリストを取得する場合に処理によって切り上げたり、切り下げるのでmathのceilとfloorは覚えておくといいでしょう。
それ以外の計算で使うならround関数でいいかなと思います。
次回はmatplotlibで途中でデータが分断されているグラフを描く方法を解説していきます。
ではでは今回はこんな感じで。
コメント