読み込み中...

Pythonで数値の表示桁数を指定する方法と活用8選

表示桁数の指定 徹底解説 Python
この記事は約19分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●Pythonで数値の表示桁数を制御する重要性

プログラミングでは、数値の扱い方が非常に大切です。

特にPythonを使う場合、表示桁数の制御は避けて通れません。なぜでしょうか?

それは、精度と可読性のバランスを取るためです。

数値を扱うとき、私たちは常に正確さを求めます。

しかし、すべての桁を表示すると、かえって読みにくくなってしまうこともあります。

例えば、円周率πを考えてみましょう。

3.14159265359…と延々と続きますが、実用的には3.14で十分な場合も多いですよね。

プログラマーの皆さんは、コードを書くときに悩んだことはありませんか?

「この数値、何桁まで表示すべきだろう?」と。

実は、表示桁数の制御は、単なる見た目の問題ではないのです。

ビジネスの現場を想像してみてください。

財務報告書で売上高を「1234567890.1234567890円」と表示したら、どう思われるでしょうか?

おそらく、「細かすぎる!」と思われるはずです。

適切に「1,234,567,890円」と表示する方が、はるかに読みやすく、理解しやすいですよね。

一方、科学の分野ではどうでしょうか?

化学実験の結果を報告する際、「反応時間は約10秒」では不十分かもしれません。

「反応時間は10.4563秒」のように、より精密な数値が求められることもあります。

つまり、状況に応じて適切な桁数を選ぶ能力が、プログラマーには求められるのです。

Pythonは、その面で非常に柔軟性が高い言語です。

様々な方法で表示桁数を制御できるため、用途に応じて最適な表現を選べます。

○プログラミングにおける精度と可読性の balance

プログラミングにおいて、精度と可読性のバランスを取ることは、芸術のような側面があります。

あまりに精密すぎると、かえって情報が伝わりにくくなる。

かといって、大雑把すぎても信頼性に欠けます。

例えば、銀行のATMシステムを開発しているとしましょう。

お客様の残高を表示する際、小数点以下何桁まで表示すべきでしょうか?

日本円なら小数点以下は不要かもしれません。

でも、外貨を扱う場合は話が変わってきます。

精度を上げすぎると、画面が数字だらけになって読みづらくなります。

逆に、丸めすぎると正確な情報が伝わりません。

このバランスを取るのが、プログラマーの腕の見せどころなのです。

Pythonは、この精度と可読性のバランスを取るのに最適な言語の1つです。

簡単な関数やメソッドを使って、状況に応じた表示が可能です。

これから、具体的な方法を見ていきましょう。

○ビジネスや科学分野での応用例

ビジネスの世界では、数値の表示方法が重要な意味を持つことがあります。

例えば、年次報告書で売上高を報告する際、「売上高:1234567890円」より「売上高:12億3456万7890円」の方が一目で規模感がわかりますよね。

Pythonを使えば、こんな表示も簡単です。

次のようなコードで実現できます。

sales = 1234567890
formatted_sales = f"{sales:,}円"
print(f"売上高:{formatted_sales}")

このコードを実行すると、次のような出力が得られます。

売上高:1,234,567,890円

見やすくなりましたね。

ただし、これは日本円の場合です。

ドルやユーロなど、他の通貨を扱う際は、また違った表示方法が必要になるかもしれません。

一方、科学分野ではもっと精密な制御が必要になることがあります。

例えば、化学実験の結果を報告する際、反応時間を秒単位で表すとしましょう。

reaction_time = 10.45638219
print(f"反応時間:{reaction_time:.4f}秒")

この結果は次のようになります。

反応時間:10.4564秒

小数点以下4桁まで表示することで、十分な精度を保ちつつ、読みやすさも確保しています。

●基本的な表示桁数の指定方法

Pythonで数値の表示桁数を制御する方法は複数あります。

ここでは、最も基本的で広く使われている3つの方法を紹介します。

それぞれに特徴があるので、状況に応じて使い分けるといいでしょう。

○サンプルコード1:round() 関数の使い方

まず紹介するのは、round() 関数です。

この関数は、数値を指定した小数点以下の桁数に丸めるのに使います。

簡単で直感的な方法なので、多くの場面で重宝します。

基本的な使い方は次のとおりです。

x = 3.14159
rounded = round(x, 2)
print(rounded)

この結果は次のようになります。

3.14

round() 関数は2つの引数を取ります。

1つ目は丸めたい数値、2つ目は小数点以下の桁数です。

上の例では、3.14159を小数点以下2桁に丸めているわけです。

注意点として、round() 関数は値を丸めるだけで、表示形式を指定するわけではありません。

つまり、3.10のように末尾が0の場合、その0は表示されません。

y = 3.10
rounded_y = round(y, 2)
print(rounded_y)

結果

3.1

このような特性があるため、round() 関数は計算途中での丸めに適していますが、最終的な表示形式の制御には向いていません。

○サンプルコード2:format() メソッドによる桁数指定

次に、format() メソッドを使う方法を見てみましょう。

こちらは、round() 関数よりも柔軟な表示制御が可能です。

基本的な使い方は次のとおりです。

x = 3.14159
formatted = "{:.2f}".format(x)
print(formatted)

この結果は次のようになります。

3.14

ここでの “{:.2f}” は書式指定子と呼ばれるもので、.2f は「小数点以下2桁の浮動小数点数」を意味します。

format() メソッドは、この書式指定子に従って数値を整形します。

format() メソッドの利点は、0埋めなどの細かい制御が可能な点です。

y = 3.1
formatted_y = "{:.2f}".format(y)
print(formatted_y)

結果

3.10

round() 関数とは違い、末尾の0も表示されます。

このため、表示の一貫性を保つのに適しています。

○サンプルコード3:f-string を使った表示桁数の制御

最後に紹介するのは、Python 3.6以降で使用可能になったf-stringです。

これは、format() メソッドの機能を更に使いやすくしたものです。

基本的な使い方は次のとおりです。

x = 3.14159
formatted = f"{x:.2f}"
print(formatted)

この結果は次のようになります。

3.14

f-stringは、文字列の前にfを付け、変数や式を{}で囲むことで、その値を文字列に埋め込むことができます。

書式指定子も同様に使用できます。

f-stringの大きな利点は、コードの可読性が高いことです。

変数名をそのまま使用できるので、何の値を表示しているのかが一目瞭然です。

例えば、複数の値を同時に表示する場合

pi = 3.14159
e = 2.71828

print(f"円周率(π)は{pi:.2f}で、自然対数の底(e)は{e:.2f}です。")

結果

円周率(π)は3.14で、自然対数の底(e)は2.72です。

このように、f-stringを使うと、複雑な表示制御も直感的に記述できます。

●高度な表示桁数の制御テクニック

Pythonで数値の表示桁数を制御する基本的な方法を学んだ後は、より高度なテクニックに挑戦してみましょう。

実務では、単純な丸めや表示だけでなく、より精密な制御が必要になることがあります。

そんな時に役立つのが、特殊なモジュールやライブラリです。

○サンプルコード4:decimal モジュールの活用

金融計算や科学計算など、高精度が求められる場面で重宝するのが decimal モジュールです。

浮動小数点数の精度の限界を超えて、任意の精度で計算や表示ができます。

まずは、decimal モジュールをインポートしましょう。

from decimal import Decimal, getcontext

# 精度を28桁に設定
getcontext().prec = 28

# 1/7を計算
result = Decimal(1) / Decimal(7)

print(f"1/7 = {result}")

実行結果は次のようになります。

1/7 = 0.1428571428571428571428571429

見事に28桁まで計算されていますね。

通常の浮動小数点数では表現できない精度です。

decimal モジュールの真価は、金融計算などで発揮されます。

例えば、0.1ドルを3回足す計算を考えてみましょう。

# 通常の浮動小数点数での計算
float_result = 0.1 + 0.1 + 0.1
print(f"Float: {float_result}")

# Decimalでの計算
decimal_result = Decimal('0.1') + Decimal('0.1') + Decimal('0.1')
print(f"Decimal: {decimal_result}")

実行結果は次のとおりです。

Float: 0.30000000000000004
Decimal: 0.3

通常の浮動小数点数では誤差が生じていますが、Decimal では正確に計算できています。

金融系のアプリケーションを開発する際には、decimal モジュールの使用を検討してみてはいかがでしょうか。

○サンプルコード5:numpy ライブラリでの精度制御

科学計算や数値解析を行う際によく使われるのが numpy ライブラリです。

大量の数値データを効率的に扱えるだけでなく、表示桁数の制御も簡単にできます。

まずは、numpy をインポートしましょう。

import numpy as np

# デフォルトの表示桁数を確認
x = np.pi
print(f"デフォルト: {x}")

# 表示桁数を3桁に設定
np.set_printoptions(precision=3)
print(f"3桁に設定: {x}")

# 表示桁数を10桁に設定
np.set_printoptions(precision=10)
print(f"10桁に設定: {x}")

実行結果は次のようになります。

デフォルト: 3.141592653589793
3桁に設定: 3.142
10桁に設定: 3.141592654

np.set_printoptions() を使うと、numpy 配列全体の表示桁数を簡単に制御できます。

大量のデータを扱う際に、見やすさと精度のバランスを取るのに便利です。

○サンプルコード6:pandas での表示桁数設定

データ分析でよく使われる pandas ライブラリでも、表示桁数の制御ができます。

大量のデータをまとめて表示する際に重宝します。

pandas をインポートして、サンプルのDataFrameを作成してみましょう。

import pandas as pd

# サンプルデータの作成
df = pd.DataFrame({
    'A': [1.123456, 2.234567, 3.345678],
    'B': [4.456789, 5.567890, 6.678901]
})

print("デフォルトの表示:")
print(df)

# 小数点以下2桁に設定
pd.set_option('display.float_format', '{:.2f}'.format)

print("\n小数点以下2桁に設定:")
print(df)

実行結果は次のようになります。

デフォルトの表示:
          A         B
0  1.123456  4.456789
1  2.234567  5.567890
2  3.345678  6.678901

小数点以下2桁に設定:
     A    B
0 1.12 4.46
1 2.23 5.57
2 3.35 6.68

pd.set_option() を使うことで、DataFrame全体の表示形式を簡単に変更できます。

大量のデータを扱う際に、見やすさと情報量のバランスを取るのに役立ちます。

●特殊なケースでの表示桁数指定

数値の表示桁数を制御する際、特殊なケースに遭遇することもあります。

例えば、非常に大きな数値や複素数を扱う場合です。

そんな時に役立つテクニックを紹介します。

○サンプルコード7:大きな数値の指数表記制御

科学計算やビッグデータの分析では、非常に大きな数値や小さな数値を扱うことがあります。

そんな時に便利なのが指数表記です。

Pythonでは、指数表記の形式も制御できます。

# 大きな数値
big_number = 1234567890123456789012345678901234567890

# デフォルトの表示
print(f"デフォルト: {big_number}")

# 指数表記で小数点以下3桁に制御
print(f"指数表記 (3桁): {big_number:.3e}")

# 指数表記で小数点以下6桁に制御
print(f"指数表記 (6桁): {big_number:.6e}")

実行結果は次のようになります。

デフォルト: 1234567890123456789012345678901234567890
指数表記 (3桁): 1.235e+39
指数表記 (6桁): 1.234568e+39

.3e や .6e という指定子を使うことで、指数表記の精度を制御できます。

大きな数値を扱う際に、見やすさと精度のバランスを取るのに役立ちます。

○サンプルコード8:複素数の表示桁数指定

複素数を扱う場合も、表示桁数の制御が必要になることがあります。

Pythonでは、複素数の実部と虚部それぞれの表示桁数を制御できます。

# 複素数
z = 1.23456789 + 2.34567890j

# デフォルトの表示
print(f"デフォルト: {z}")

# 実部と虚部を別々に制御
print(f"カスタム (実部2桁, 虚部3桁): {z.real:.2f} + {z.imag:.3f}j")

# 一括で制御
print(f"カスタム (両方4桁): {z:.4f}")

実行結果は次のようになります。

デフォルト: (1.23456789+2.3456789j)
カスタム (実部2桁, 虚部3桁): 1.23 + 2.346j
カスタム (両方4桁): 1.2346+2.3457j

複素数の表示桁数を制御する際は、実部と虚部を別々に扱うか、一括で扱うかを選べます。

用途に応じて使い分けると良いでしょう。

●よくあるエラーと対処法

Pythonで数値の表示桁数を制御する際、時々エラーに遭遇することがあります。

初心者の方々はもちろん、経験豊富なプログラマーでさえ悩まされることがあるでしょう。

ですが、ご安心ください。

エラーの正体を知り、適切な対処法を学べば、問題はすぐに解決します。

○TypeError: ‘float’ object is not callable

まず最初に、よく見かけるエラーの一つ、「TypeError: ‘float’ object is not callable」について説明しましょう。

皆さん、小数点を含む数値を扱う際に出くわしたことはありませんか?

例えば、次のようなコードを書いたとします。

x = 3.14
result = x(2)
print(result)

実行すると、次のようなエラーメッセージが表示されます。

TypeError: 'float' object is not callable

「え?何が起きたの?」と思われるかもしれません。

実は、これは浮動小数点数(float型)オブジェクトを関数のように呼び出そうとしたために発生したエラーなんです。

Pythonは、x(2)という記述を見て、xを関数として呼び出そうとしました。

でも、xは単なる数値なので、関数として呼び出すことはできません。

対処法は簡単です。

関数の呼び出しではなく、数値の演算を行うように修正しましょう。

例えば、掛け算がしたかったのであれば、次のように書き換えます。

x = 3.14
result = x * 2
print(result)

実行結果

6.28

見事に解決しましたね。

エラーメッセージをよく読み、意図した操作と実際のコードの間にズレがないか確認することが大切です。

○ValueError: Invalid format specifier

次に、「ValueError: Invalid format specifier」というエラーについて考えてみましょう。

format()メソッドや f-string を使って数値の表示形式を指定する際によく遭遇するエラーです。

例えば、次のようなコードを書いたとします。

x = 3.14159
print(f"{x:.2f%}")

実行すると、次のようなエラーメッセージが表示されます。

ValueError: Invalid format specifier

「ん?おかしいな。小数点以下2桁で表示しようとしただけなのに…」と思われるかもしれません。

実は、%記号が問題を引き起こしています。

%記号はパーセント表示を意味しますが、浮動小数点数の表示指定子fと一緒に使うことはできません。

対処法は、目的に応じて適切な書式指定子を使用することです。

パーセント表示がしたい場合は次のように書きます。

x = 3.14159
print(f"{x:.2%}")

実行結果

314.16%

もし単に小数点以下2桁で表示したいだけなら、%記号を削除します。

x = 3.14159
print(f"{x:.2f}")

実行結果

3.14

書式指定子の使い方を正しく理解し、適切に使用することでエラーを回避できます。

○OverflowError: int too large to convert to float

最後に、「OverflowError: int too large to convert to float」というエラーについて説明しましょう。

大きな整数を扱う際に遭遇することがあります。

例えば、次のようなコードを書いたとします。

big_num = 10**1000
print(float(big_num))

実行すると、次のようなエラーメッセージが表示されます。

OverflowError: int too large to convert to float

「えっ?こんな大きな数値は扱えないの?」と驚かれるかもしれません。

実は、Pythonの浮動小数点数(float型)には表現できる最大値があり、それを超えるとオーバーフローが発生してしまうのです。

対処法としては、大きな数値を扱える別の方法を使用することです。

例えば、decimalモジュールを使うと、より大きな数値を扱えます。

from decimal import Decimal

big_num = 10**1000
decimal_num = Decimal(big_num)
print(decimal_num)

実行結果

100000000000000000000000000000000000000000000000000...(省略)...00000000000000000000000000000000

decimalモジュールを使用することで、大きな数値も正確に扱えるようになりました。

状況に応じて適切なデータ型や方法を選択することが重要です。

●表示桁数制御の応用例

さて、エラー対処法を学んだところで、表示桁数制御の実践的な応用例を見ていきましょう。

実務では、単に桁数を制御するだけでなく、目的に応じた適切な表示方法を選択することが求められます。

○金融計算での正確な小数点以下の制御

金融計算では、端数処理の方法が重要です。

例えば、0.1円の商品を3つ買った場合、0.3円になりますが、これをどう表示し、計算するかが問題になります。

from decimal import Decimal, ROUND_HALF_UP

# 0.1円の商品を3つ購入
price = Decimal('0.1')
quantity = 3

# 通常の計算
normal_total = price * quantity
print(f"通常の計算結果: {normal_total}")

# 小数点以下2桁で四捨五入
rounded_total = normal_total.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(f"四捨五入後: {rounded_total}")

実行結果

通常の計算結果: 0.3
四捨五入後: 0.30

decimalモジュールを使用することで、金融計算で求められる精度を保ちつつ、適切な表示ができました。

○科学計算における有効数字の表現

科学計算では、測定値の精度を正確に表現するために有効数字が使われます。

Pythonでも、有効数字を考慮した表示が可能です。

import numpy as np

# 測定値(有効数字3桁)
measurement = 1.23456e-5

# 有効数字3桁で表示
print(f"測定値 (有効数字3桁): {measurement:.3g}")

# 科学的記数法で表示
print(f"科学的記数法: {measurement:.2e}")

実行結果

測定値 (有効数字3桁): 1.23e-05
科学的記数法: 1.23e-05

.3gや.2eといった書式指定子を使用することで、有効数字を考慮した表示や科学的記数法による表示が可能になりました。

○データ可視化での効果的な数値表示

データ可視化の際、大量のデータを効果的に表示することが求められます。

pandasを使用して、データフレームの表示桁数を制御してみましょう。

import pandas as pd
import numpy as np

# ランダムなデータを生成
df = pd.DataFrame(np.random.random((5, 3)), columns=['A', 'B', 'C'])

print("デフォルトの表示:")
print(df)

# 小数点以下3桁に設定
pd.set_option('display.float_format', '{:.3f}'.format)

print("\n小数点以下3桁に設定:")
print(df)

実行結果

デフォルトの表示:
          A         B         C
0  0.670686  0.369077  0.606712
1  0.794598  0.968832  0.488898
2  0.331183  0.978730  0.049423
3  0.686764  0.138810  0.591030
4  0.826798  0.199789  0.569411

小数点以下3桁に設定:
     A    B    C
0 0.671 0.369 0.607
1 0.795 0.969 0.489
2 0.331 0.979 0.049
3 0.687 0.139 0.591
4 0.827 0.200 0.569

pd.set_option()を使用することで、データフレーム全体の表示形式を簡単に変更できました。

大量のデータを扱う際、可読性を高めるのに役立ちます。

まとめ

Pythonにおける数値の表示桁数制御について、基本から応用まで幅広く解説しました。

単純な丸めから、複雑な金融計算や科学的表記まで、様々なシチュエーションに対応できるようになったかと思います。

今回学んだ技術を活かし、より質の高いコードを書いていってください。