Pythonの数値の桁数や丸めなどの操作のまとめ

Pythonで数値を扱うときには、見やすく分かりやすくするために、桁数を、しっかりと調整したくなるものです。

ここでは、その数値の桁数の調整に関して、使える操作の全てを紹介しています。どれも、Pythonにおいて頻繁に使うものなので、ぜひマスターしておきましょう!

目次

1. 数値の小数点を丸める | round()関数

数値の小数点を丸めるには round()関数を使います。よく勘違いされるのですが、round()関数は、小数点を単純に四捨五入するものではありません。この点も一緒に解説していきます。

まずは基本書式です。

In [0]:
# 小数点を丸める
round(数値, 丸める位)

括弧 () の中に入れる値のことを「引数(ひきすう)」といいます。引数を複数入力できるものの場合は、左から第一引数、第二引数と数えます。引数と引数の間は、カンマ「,」で区切ります。

それでは例を見ていきましょう。

1.1. 小数点以下を丸めて整数化する

次の例では、四捨五入と同じように機能しています。

In [1]:
#round関数はより近い整数に丸めます。
round(1.4)
round(1.6)
Out[1]:
1
2

次の例では、1.5 を丸めると 2 になっています。同時に 2.5 を丸めた時も 3 ではなく 2 になっています。

In [2]:
#差が同じ場合は偶数側に丸めます。
round(1.5)
round(2.5)
Out[2]:
2
2

なぜこうなるのかと言うと、round()関数は、もともと、四捨五入する関数ではなく、より値の近い方へ数値を丸める関数だからです。

例えば、1.4 という数字があるとします。1.4 と 1 の差は 0.4 です。1.4 と 2 の差は 0.6 です。つまり、1.4 は、1 により近い数字なので丸めると 1 になります。

しかし、1.5 の場合は、2 に対しても 1 に対しても、同じ 0.5 の違いです。このように、差が同じ時、round()関数は、偶数側に丸めます。

なお、引数に入力するのは、変数でも構いません。

In [3]:
x = 1.5
round(x)
Out[3]:
2

1.2. 小数点以下の指定の桁数で丸める

次に、丸める桁数を指定して見ましょう。以下をご覧ください。

In [4]:
#小数点以下1位で丸めます。
round(1.234, 1)
#小数点以下2位で丸めます。
round(1.234, 2)
Out[4]:
1.2
1.23

このように、第一引数の後に、カンマで区切って、小数点以下何位で丸めるかを数値で指定します。

ポイント!
round()関数は、数値を四捨五入するのではなく、指定の桁数で「丸める」関数です。偶数側と奇数側への差が同じ時は、偶数側に丸めます。

2. format()メソッドを使った位取りや幅取り

format()メソッドは、Python 3 から新たに追加されたメソッドで、後に Python2.6 以降にも逆移植されました。Python において頻繁に使いますので、しっかり押さえておきましょう。

基本的には、次の例のように、文字列の中に、任意の数字や文字を埋め込む時に使います。

In [1]:
"私は{}才です。".format(21)  
Out[1]:
'私は21才です。'

文字列の中のブラケット {} を「置換フィールド」といいます。また、format()の括弧 () の中に入力する値を「引数(ひきすう)」といいます。

置換フィールドは、何個あっても良いですし、文字列は変数であっても構いません。置換フィールドが複数の時は、それぞれ第一引数と、第二引数をカンマ( ,  )で区切ります。

In [2]:
text = "私は{}才で、弟は{}才です。"
text.format(21, 16)
Out[2]:
'私は21才で、弟は16才です。'
In [3]:
text = "私は{}才で、弟は{}才です。"
age_1 = 21
age_2 = 16
text.format(age_1, age_2)
Out[3]:
'私は21才で、弟は16才です。'

このような format()メソッドを使った文字列や数値の埋め込みについては、「Pythonの文字列変数で必ず知っておくべき操作まとめ」の中で、さらに様々な例を解説しているので、是非ご覧下さい。

Python では、この format()メソッドを使って、様々な形で数値を出力することができます。

2.1. 数値を3桁ずつ位取りする

まずは、数値の3桁ずつの位取りを見ていきましょう。

数値を位取りするには、置換フィールド {} の中に、コロンとカンマを続けて{:,}と書いておきます。

In [1]:
#3桁ずつの数値の位取り
"{:,}".format(1234567)
Out[1]:
'1,234,567'
In [2]:
#文字列に埋め込む時は次のように書きます。
text = "東京の人口は{:,}人です。"
text.format(3000000)
Out[2]:
'東京の人口は3,000,000人です。'

引数が、数値を代入した変数でも構いません。

In [3]:
text = "東京の人口は{:,}人です。"
num = 3000000
text.format(num)
Out[3]:
'東京の人口は3,000,000人です。'

2.2. 小数点以下の桁数を指定する

小数点以下の桁数を指定する時は、置換フィールド {} の中に、コロンとピリオドを続けて {:.桁f} と打ちます。例えば、小数点以下2位で表示したければ、{:.2f} 、3位で表示したければ、 {:.3f} と打ちます。

“f” は 「浮動小数点数(floating point numbers)」の “f” です。

例を見てみましょう。

In [1]:
# 小数点以下2桁にする。
"{:.2f}".format(3.141592)
Out[1]:
'3.14'
In [2]:
#文字列の中に埋め込んでみます。
text = "円周率は{:.2f}です。小学校では{:.0f}で計算します。"
pi = 3.141592
text.format(pi, pi)
Out[2]:
'円周率は3.14です。小学校では3で計算します。'

実際の桁数よりも多く指定した場合は、数字の後に 0 が続きます。

In [3]:
# 固定小数点5桁
"{0:.5f}".format(12.34)
Out[22]:
'12.34000'

2.3. 位取りと桁数指定を同時に行う

位取りと桁数指定を同時に行うには、置換フィールドの中に、次のように、コロン、カンマ、ピリオドを続けて {:,.桁f} と打ちます。

例を見てみましょう。

In [1]:
#位取りと小数点の位の桁指定は{:,.○f}で行います。
"{:,.2f}".format(1234567.891)
Out[1]:
'1,234,567.89'
In [2]:
#文字列に埋め込んでみましょう。
text = "山田選手の総合ポイントは{:,.3f}です。"
point = 1525.46812
text.format(point)
Out[2]:
'山田選手の総合ポイントは1,525.468です。'

2.4. 数値の幅指定と位置揃えを行う

数値の幅を指定するには、置換フィールド {} の中に、コロンを書き、その後に数字で幅を指定する数値を続け、{:数値} と書きます。例えば、10文字幅にしたければ、{:10} とします。

また、数値を右、左、中央寄せするには、コロンと数値の間に、それぞれ、”>”, “<“, “^” を入力します。

実際に見てみましょう。

In [1]:
"{:10}".format(10)      #10文字幅になります。
"{:10}".format(20)      #20文字幅になります。
"{:>10}".format(10)   #10文字幅、右寄せ。
"{:<10}".format(10)   #10文字幅、左寄せ。
"{:<10}".format(10)   #10文字幅、中央寄せ。
Out[1]:
'        10'
'                  10'
'        10'
'10        '
'    10    '

空白スペースの詰め文字を指定することもできます。その時は、置換フィールドの中に {:「詰め文字」「幅寄せ記号」「文字幅数値」} の順番で続けて書きます。

次の例をご覧ください。

In [2]:
"{:0>10}".format(10)  #詰め文字に 0 を使用。
"{:.<10}".format(10)   #詰め文字に . を使用。
"{:-^10}".format(10)   #詰め文字に - を使用。
Out[2]:
'0000000010'
'10........'
'----10----'

こうした文字幅指定や文字寄せを使うと、様々な見せ方が可能になります。以下をご覧ください。

In [3]:
text = "山田選手の得点は{:^10}\n佐藤選手の得点は{:^10}\n小林選手の得点は{:^10}点です。"
a = 42
b = 193
c = 91
text.format(a,b,c)
Out[3]:
'山田選手の得点は    42    点\n佐藤選手の得点は   193    点\n小林選手の得点は    91    点です。'

“\n” は改行コードです。これを、 print() 関数を使って、出力すると次のように見た目が揃います。

なお、改行については「Pythonの文字列の改行と便利な操作まとめ」で、print()関数については「Pythonの文字列変数で必ず知っておくべき操作まとめ」でご確認ください。

In [4]:
print(text.format(a,b,c))
山田選手の得点は    42    点
佐藤選手の得点は   193    点
小林選手の得点は    91    点です。

2.5. 組み合わせて使う

ここまででお伝えした、3桁ずつの位取り、小数点以下の桁の指定、幅指定と位置揃えは、全て、次のように組み合わせて使うことができます。

In [1]:
text = "山田選手の総合ポイントは{:-^30,.3f}です。"
point = 1525.46812
text.format(point)
Out[1]:
'山田選手の総合ポイントは----------1,525.468-----------です。'

ぜひ覚えておきましょう!

2.6. 進数変換を行う

format() メソッドを使うと、手軽に、数値の進数を変換することができます。その際は、置換フィールドで、コロンの後に、10進数なら {:d}、2進数なら {:b}、8進数なら {:o}、16進数なら {:x} と書きます。

In [1]:
"{:d}".format(10) #10進数は"d"
"{:b}".format(10) #2進数は"b"
"{:o}".format(10) #8進数は"o"
"{:x}".format(10) #16進数は"x"
Out[1]:
'10'
'1010'
'12'
'a'

簡単ですね。

ポイント!
format()メソッドは、Pythonで頻繁に使うメソッドです。「Pythonの文字列変数で必ず知っておくべき操作まとめ」の中の解説も一緒に読んで、理解を深めておきましょう。

3. 数値の桁の位取り| f プリフィクス

f プリフィクスは、Python 3.6 以降から登場しました。上述のformat()メソッドが、さらに使いやすくなったものです。

非常に便利なため、コードを書くときに多用するものです。format()メソッドが使えるようになっているなら、このfプリフィクスも、簡単に使えるようになります。

早速見ていきましょう。

3.1. 数値を3桁ずつ位取りする

fプリフィクスで数値を3桁ずつ位取りするには、次のように書きます。

In [0]:
f"{数値:,}"

例を見ていきましょう。

In [1]:
#fプリフィクスを使って位取りします。
f"{3000000:,}"
Out[1]:
'3,000,000'
In [2]:
#変数に対しても可能です。
x= 3000000
f"{x:,}"
Out[2]:
'3,000,000'

文字列の中に埋め込んでみましょう。

In [4]:
#fプリフィクスは、このようの文字列中への値の埋め込みに便利です。
population = 3000000
text = f"東京の人口は{population:,}人です。"
print(text)
東京の人口は3,000,000人です。

fプリフィクスは、「Pythonの文字列変数で必ず知っておくべき操作まとめ」でも解説していますので、一緒に見ておきましょう。

3.2. 小数点以下の任意の位で丸める

小数点以下の任意の位で丸めるには、次のように書きます。

In [0]:
f"{数値:.桁数f}"

桁数は数値で指定します。見ていきましょう。

In [1]:
num = 3525.346
#小数点以下1位で丸める。
f"{num:.1f}"
#小数点以下2位で丸める.
f"{num:.2f}"
Out[1]:
'3525.3'
'3525.35'

簡単ですね。

ただし、1つ注意点があります。基本的には、桁数を丸める際は、四捨五入されます。しかし、次のように、最後の桁の数字が 5 の時に、何故か、丸め方が異なる場合があります。この点だけ注意してください。

In [2]:
num = 25.345
f"{num:.2f}"
Out[2]:
'25.34'
In [3]:
num = 325.345
f"{num:.2f}"
Out[3]:
'325.35'

3.3. 3桁位取りと小数点以下の丸めを同時に行う

上記 2 つを組み合わせて使うと、両方を同時に行うことが可能です。次のように書きます。

In [0]:
f"{数値:,.桁f}"

見てみましょう。

In [1]:
#位取りと小数点以下の丸めを同時に行うには{:,:.桁f}と続けて入力します。
f"{num:,.2f}"
Out[1]:
'3,525.35'

簡単ですね。

ポイント!
fプリフィクスは、Python 3.6 以降で導入されたものです。コードの見た目がよりスッキリとなり、処理速度も増しますので、これも、「Pythonの文字列変数で必ず知っておくべき操作まとめ」の中の解説も一緒に読んで、理解を深めておきましょう。

4. まとめ

いかがだったでしょうか。

まとめると、Pythonの数値の桁数調整においては、

  • round()関数
  • format()メソッド
  • fプリフィクス

を使うことができます。しっかり、焦らず、一つずつ試してみましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる