Pythonで数字にカンマを挿入する2つの方法

スポンサーリンク

locale モジュールを使用する方法

Pythonで数字にカンマを挿入する一般的な方法は、locale モジュールを使用する方法です。以下に例を示します

import locale

# ロケールの設定(環境に合わせて設定してください)
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 

# カンマを挿入したい数字
number = 1234567.89

# カンマを挿入して表示
formatted_number = locale.format_string("%0.2f", number, grouping=True)
print(formatted_number)

上記のコードでは、locale モジュールの setlocale 関数を使用してロケールを設定しています。この設定によって、数字の表示方法が変わります。例では 'en_US.UTF-8' を指定していますが、使用している環境に応じて適切なロケールを指定してください。

locale.format_string 関数は、指定されたフォーマットで数字を整形します。"%0.2f" は小数点以下2桁までの浮動小数点数を表すフォーマットです。grouping=True を指定することで、3桁ごとにカンマが挿入されます。

スポンサーリンク

正規表現を使う方法

正規表現を使用する方法も可能です。

以下に正規表現を使用して数字にカンマを挿入する例を示します

import re

x = 1000000000

result = re.compile(r'(\d)(?=(\d{3})+(?!\d))')
formatted_number = result.sub(r'\1,', str(x))

print(formatted_number)

re.compile() 関数を使用して正規表現パターンをコンパイルし、re.sub() 関数を使用して正規表現にマッチした部分を置換します。置換部分では、\1 を使用して最初にマッチした数字を参照し、その後ろにカンマを挿入することで整形しています。

ただこれだと数字に小数点が含まれている場合にうまくいかないので以下のようにします。

import re

x = 10000000000.00

# 小数点を基準に数値を分割
parts = str(x).split(".")
integer_part = parts[0]
decimal_part = parts[1] if len(parts) > 1 else ""
print(parts)

# 整数部分に対して正規表現置換を行う
result = re.compile(r'(\d)(?=(\d{3})+(?!\d))')
formatted_number = result.sub(r'\1,', integer_part)

# 小数点文字列を連結
formatted_number = formatted_number + "." + decimal_part if decimal_part else formatted_number

print(formatted_number)

小数点のピリオドを指定してsplit()で分割します。整数の部分だけ正規表現で置換を行うようにします。あとから小数点の部分を連結させます。

これの結果なんですが「10,000,000,000.0」になります。
なんで「10,000,000,000.00」にならないんだと思われるかもしれませんが、小数点の末尾で0が連続する場合は省略されます。つまりstr(x)の時点ですでに省略が行われるため結果は先ほどのように.0までとなります。これが100.01とかだったら省略はされません。

コメント

タイトルとURLをコピーしました