Pythonで数値を扱うときには、見やすく分かりやすくするために、桁数を、しっかりと調整したくなるものです。
ここでは、その数値の桁数の調整に関して、使える操作の全てを紹介しています。どれも、Pythonにおいて頻繁に使うものなので、ぜひマスターしておきましょう!
1. 数値の小数点を丸める | round()関数
数値の小数点を丸めるには round()関数を使います。よく勘違いされるのですが、round()関数は、小数点を単純に四捨五入するものではありません。この点も一緒に解説していきます。
まずは基本書式です。
# 小数点を丸める
round(数値, 丸める位)
括弧 () の中に入れる値のことを「引数(ひきすう)」といいます。引数を複数入力できるものの場合は、左から第一引数、第二引数と数えます。引数と引数の間は、カンマ「,」で区切ります。
それでは例を見ていきましょう。
1.1. 小数点以下を丸めて整数化する
次の例では、四捨五入と同じように機能しています。
#round関数はより近い整数に丸めます。
round(1.4)
round(1.6)
次の例では、1.5 を丸めると 2 になっています。同時に 2.5 を丸めた時も 3 ではなく 2 になっています。
#差が同じ場合は偶数側に丸めます。
round(1.5)
round(2.5)
なぜこうなるのかと言うと、round()関数は、もともと、四捨五入する関数ではなく、より値の近い方へ数値を丸める関数だからです。
例えば、1.4 という数字があるとします。1.4 と 1 の差は 0.4 です。1.4 と 2 の差は 0.6 です。つまり、1.4 は、1 により近い数字なので丸めると 1 になります。
しかし、1.5 の場合は、2 に対しても 1 に対しても、同じ 0.5 の違いです。このように、差が同じ時、round()関数は、偶数側に丸めます。
なお、引数に入力するのは、変数でも構いません。
x = 1.5
round(x)
1.2. 小数点以下の指定の桁数で丸める
次に、丸める桁数を指定して見ましょう。以下をご覧ください。
#小数点以下1位で丸めます。
round(1.234, 1)
#小数点以下2位で丸めます。
round(1.234, 2)
このように、第一引数の後に、カンマで区切って、小数点以下何位で丸めるかを数値で指定します。
round()関数は、数値を四捨五入するのではなく、指定の桁数で「丸める」関数です。偶数側と奇数側への差が同じ時は、偶数側に丸めます。
2. format()メソッドを使った位取りや幅取り
format()メソッドは、Python 3 から新たに追加されたメソッドで、後に Python2.6 以降にも逆移植されました。Python において頻繁に使いますので、しっかり押さえておきましょう。
基本的には、次の例のように、文字列の中に、任意の数字や文字を埋め込む時に使います。
"私は{}才です。".format(21)
文字列の中のブラケット {} を「置換フィールド」といいます。また、format()の括弧 () の中に入力する値を「引数(ひきすう)」といいます。
置換フィールドは、何個あっても良いですし、文字列は変数であっても構いません。置換フィールドが複数の時は、それぞれ第一引数と、第二引数をカンマ( , )で区切ります。
text = "私は{}才で、弟は{}才です。"
text.format(21, 16)
text = "私は{}才で、弟は{}才です。"
age_1 = 21
age_2 = 16
text.format(age_1, age_2)
このような format()メソッドを使った文字列や数値の埋め込みについては、「Pythonの文字列変数で必ず知っておくべき操作まとめ」の中で、さらに様々な例を解説しているので、是非ご覧下さい。
Python では、この format()メソッドを使って、様々な形で数値を出力することができます。
2.1. 数値を3桁ずつ位取りする
まずは、数値の3桁ずつの位取りを見ていきましょう。
数値を位取りするには、置換フィールド {} の中に、コロンとカンマを続けて{:,}と書いておきます。
#3桁ずつの数値の位取り
"{:,}".format(1234567)
#文字列に埋め込む時は次のように書きます。
text = "東京の人口は{:,}人です。"
text.format(3000000)
引数が、数値を代入した変数でも構いません。
text = "東京の人口は{:,}人です。"
num = 3000000
text.format(num)
2.2. 小数点以下の桁数を指定する
小数点以下の桁数を指定する時は、置換フィールド {} の中に、コロンとピリオドを続けて {:.桁f} と打ちます。例えば、小数点以下2位で表示したければ、{:.2f} 、3位で表示したければ、 {:.3f} と打ちます。
“f” は 「浮動小数点数(floating point numbers)」の “f” です。
例を見てみましょう。
# 小数点以下2桁にする。
"{:.2f}".format(3.141592)
#文字列の中に埋め込んでみます。
text = "円周率は{:.2f}です。小学校では{:.0f}で計算します。"
pi = 3.141592
text.format(pi, pi)
実際の桁数よりも多く指定した場合は、数字の後に 0 が続きます。
# 固定小数点5桁
"{0:.5f}".format(12.34)
2.3. 位取りと桁数指定を同時に行う
位取りと桁数指定を同時に行うには、置換フィールドの中に、次のように、コロン、カンマ、ピリオドを続けて {:,.桁f} と打ちます。
例を見てみましょう。
#位取りと小数点の位の桁指定は{:,.○f}で行います。
"{:,.2f}".format(1234567.891)
#文字列に埋め込んでみましょう。
text = "山田選手の総合ポイントは{:,.3f}です。"
point = 1525.46812
text.format(point)
2.4. 数値の幅指定と位置揃えを行う
数値の幅を指定するには、置換フィールド {} の中に、コロンを書き、その後に数字で幅を指定する数値を続け、{:数値} と書きます。例えば、10文字幅にしたければ、{:10} とします。
また、数値を右、左、中央寄せするには、コロンと数値の間に、それぞれ、”>”, “<“, “^” を入力します。
実際に見てみましょう。
"{:10}".format(10) #10文字幅になります。
"{:10}".format(20) #20文字幅になります。
"{:>10}".format(10) #10文字幅、右寄せ。
"{:<10}".format(10) #10文字幅、左寄せ。
"{:<10}".format(10) #10文字幅、中央寄せ。
空白スペースの詰め文字を指定することもできます。その時は、置換フィールドの中に {:「詰め文字」「幅寄せ記号」「文字幅数値」} の順番で続けて書きます。
次の例をご覧ください。
"{:0>10}".format(10) #詰め文字に 0 を使用。
"{:.<10}".format(10) #詰め文字に . を使用。
"{:-^10}".format(10) #詰め文字に - を使用。
こうした文字幅指定や文字寄せを使うと、様々な見せ方が可能になります。以下をご覧ください。
text = "山田選手の得点は{:^10}点\n佐藤選手の得点は{:^10}点\n小林選手の得点は{:^10}点です。"
a = 42
b = 193
c = 91
text.format(a,b,c)
“\n” は改行コードです。これを、 print() 関数を使って、出力すると次のように見た目が揃います。
なお、改行については「Pythonの文字列の改行と便利な操作まとめ」で、print()関数については「Pythonの文字列変数で必ず知っておくべき操作まとめ」でご確認ください。
print(text.format(a,b,c))
2.5. 組み合わせて使う
ここまででお伝えした、3桁ずつの位取り、小数点以下の桁の指定、幅指定と位置揃えは、全て、次のように組み合わせて使うことができます。
text = "山田選手の総合ポイントは{:-^30,.3f}です。"
point = 1525.46812
text.format(point)
ぜひ覚えておきましょう!
2.6. 進数変換を行う
format() メソッドを使うと、手軽に、数値の進数を変換することができます。その際は、置換フィールドで、コロンの後に、10進数なら {:d}、2進数なら {:b}、8進数なら {:o}、16進数なら {:x} と書きます。
"{:d}".format(10) #10進数は"d"
"{:b}".format(10) #2進数は"b"
"{:o}".format(10) #8進数は"o"
"{:x}".format(10) #16進数は"x"
簡単ですね。
format()メソッドは、Pythonで頻繁に使うメソッドです。「Pythonの文字列変数で必ず知っておくべき操作まとめ」の中の解説も一緒に読んで、理解を深めておきましょう。
3. 数値の桁の位取り| f プリフィクス
f プリフィクスは、Python 3.6 以降から登場しました。上述のformat()メソッドが、さらに使いやすくなったものです。
非常に便利なため、コードを書くときに多用するものです。format()メソッドが使えるようになっているなら、このfプリフィクスも、簡単に使えるようになります。
早速見ていきましょう。
3.1. 数値を3桁ずつ位取りする
fプリフィクスで数値を3桁ずつ位取りするには、次のように書きます。
f"{数値:,}"
例を見ていきましょう。
#fプリフィクスを使って位取りします。
f"{3000000:,}"
#変数に対しても可能です。
x= 3000000
f"{x:,}"
文字列の中に埋め込んでみましょう。
#fプリフィクスは、このようの文字列中への値の埋め込みに便利です。
population = 3000000
text = f"東京の人口は{population:,}人です。"
print(text)
fプリフィクスは、「Pythonの文字列変数で必ず知っておくべき操作まとめ」でも解説していますので、一緒に見ておきましょう。
3.2. 小数点以下の任意の位で丸める
小数点以下の任意の位で丸めるには、次のように書きます。
f"{数値:.桁数f}"
桁数は数値で指定します。見ていきましょう。
num = 3525.346
#小数点以下1位で丸める。
f"{num:.1f}"
#小数点以下2位で丸める.
f"{num:.2f}"
簡単ですね。
ただし、1つ注意点があります。基本的には、桁数を丸める際は、四捨五入されます。しかし、次のように、最後の桁の数字が 5 の時に、何故か、丸め方が異なる場合があります。この点だけ注意してください。
num = 25.345
f"{num:.2f}"
num = 325.345
f"{num:.2f}"
3.3. 3桁位取りと小数点以下の丸めを同時に行う
上記 2 つを組み合わせて使うと、両方を同時に行うことが可能です。次のように書きます。
f"{数値:,.桁f}"
見てみましょう。
#位取りと小数点以下の丸めを同時に行うには{:,:.桁f}と続けて入力します。
f"{num:,.2f}"
簡単ですね。
fプリフィクスは、Python 3.6 以降で導入されたものです。コードの見た目がよりスッキリとなり、処理速度も増しますので、これも、「Pythonの文字列変数で必ず知っておくべき操作まとめ」の中の解説も一緒に読んで、理解を深めておきましょう。
4. まとめ
いかがだったでしょうか。
まとめると、Pythonの数値の桁数調整においては、
- round()関数
- format()メソッド
- fプリフィクス
を使うことができます。しっかり、焦らず、一つずつ試してみましょう。
コメント