小数点を処理する方法 – round / python

python における小数点の処理の仕方について見ていきます。

前回はA事業に所属するチームの平均売上高を算出しました。
参照  →  売上データを集計する方法 – 辞書型 / for 構文

何のことわりもなく、四捨五入をして少数第1位まで表示させましたが、業績評価においては「四捨五入・切り捨て・切上げ」のルール通りに報告する必要があります。

前回において、平均点の計算式は
ave_v  = round (Asum/len(salesA),1) となっておりましたが、
 Asum / len (salesA) の答えを、「766666.66666」に読み替えて説明していきます。

小数点以下の処理方法

#四捨五入をする場合・・①

ave_v = round ( 766666.66666)
print(ave_v)
>>> 766667

 

#小数点以下を切り捨てる場合・・②

import math

ave_v= math.floor(766666.66666)
print(ave_v)
>>> 766666

 

#小数点以下を切り上げる場合・・③

import math

ave_v= math.ceil(766666.66666)
print(ave_v)
>>> 766667

 

① 小数点以下を四捨五入をする

小数点以下を四捨五入するには「round ( ) 」を利用します。

 

カッコ( ) の中に入れる値を「引数」といいます。
引数を複数入力できる場合は、左から第1数、第2引数と数えます。

 

round( ) の()の中の第1引数は対象となる値ですが、第2引数は丸めて表示する位を指定します。

 

第2引数を指定しない場合は小数点第1位を四捨五入して整数になります。

ave_v = round ( 766666.66666)
print(ave_v)
>>> 766667

round( 対象値 , 丸めて表示する位)

 

第2引数に「1」を指定した場合には、四捨五入をして少数点第1位まで表示します。
(小数点以下第2位を四捨五入して第1位まで表示する)

ave_v = round ( 766666.66666,1)
print(ave_v)
>>> 766666.7

 

第2引数に「-1」を指定した場合には、四捨五入をして整数1の位が「0」になります。
(整数の1の位を四捨五入する)

ave_v = round ( 766666.66666,-1)
print(ave_v)
>>> 766670.0

 

 

②小数点以下を切り捨てる

Pythonで切り捨てにするには、Python付属のmathモジュールの「floor」を使います。
「import math」と記述して、mathモジュールをインポートします。

import math
ave_v= math.floor(766666.66666)
print(ave_v)
>>> 766666

 

 

③小数点以下を切り上げる

Pythonで切り上げにするには、Python付属のmathモジュールの「ceil」を使います。
「import math」と記述して、mathモジュールをインポートします。
(すでにインポートされている場合は不要)

import math

ave_v= math.ceil(766666.66666)
print(ave_v)
>>> 766667

 

round( )で「5」を丸める場合は注意!

#期待値1.3  ×
ave_v = round (1.25,1)
print(ave_v)
>>>1.2

#期待値1.4  〇
ave_v = round (1.35,1)
print(ave_v)
>>>1.4

 

#期待値1.5 ×
ave_v = round (1.45,1)
print(ave_v)
>>>1.4

 

#期待値1.6  〇
ave_v = round (1.55,1)
print(ave_v)
>>>1.6

 

#期待値1.7   ×
ave_v = round (1.65,1)
print(ave_v)
>>>1.6

 

#期待値1.8  〇
ave_v = round (1.75,1)
print(ave_v)
>>>1.8

 

#期待値1.9   〇
ave_v = round (1.85,1)
print(ave_v)
>>>1.9

 

#期待値2.0   ×
ave_v = round (1.95,1)
print(ave_v)
>>>1.9

 

round( ) で「5」を丸める場合は注意が必要です。
上記のように例をあげてみました。

# 期待する値  〇(表示の値が同じ場合)  ×(表示の値が異なる場合)

#期待値1.3  ×
ave_v = round (1.25,1)
print(ave_v)
>>>1.2

「1.25」の値について、少数点2位を四捨五入して小数点1位で表示させています。
期待する値は「1.3」になるはずですが、表示される値は「1.2」となります。

原因は ,次の公式ページにもあるように、小数を浮動小数点数で正確に表せないことが原因 のようです。
組み込み関数round()

そこで、小数点数を正しく十進数で計算するにはdecimalモジュールを使用する必要があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です