問題は、本番環境でのPython 2.6の問題です。Pythonでカンマと指定された精度の数字をフォーマットする方法
私はカンマで数字(1234567.0987または1234567.0のような)をフォーマットし、小数点以下の桁数を指定するためのこの要件を持っています。したがって、精度が3の場合、1234567.0987は1,234,567.099のように見えます。
ロケールを使用しようとしましたが、多くの質問に対する回答で示唆されているように、10進数の後に2桁の数字が表示されています。
私は他の場所で検索しようとしたが、いずれかの解決策を見つけられませんでした、そして最終的に私は自分のことでメソッドを作成しました:
def format_float(value, precision = 4):
formatString = "%0." + str(precision) + "f"
str_val = formatString % value
first, second = str_val.split('.')
first = int(first)
group = []
while True:
result, mod = first/1000, first % 1000
group.append(str(mod))
if result == 0:
break
first = result
group.reverse()
return ','.join(group) + '.' + second
私はメソッドをテストするためにいくつかのテストを実行しようとしましたが、それが正常に動作します:
# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == '0.0000'
# 3 digits precision
assert format_float(1234567890.0876543, precision=3) == '1,234,567,890.088'
assert format_float(0, precision=3) == '0.000'
私は、これが許容可能な解決策であるかどうかということです。このフォーマットは厳しいfor-loopで何度も行わなければならないので、誰かがより良い解決策を指すことができるのであれば、私は感謝しています。あなたが何か行うことができますのpython 2.7および3.xのすべての
「1000000」と試してください。 –
マーク、ありがとうございます。それはすぐそこに一つの良いバグです、私はこれを修正する必要があります。 – cspider
'locale'モジュールを使う必要はありません。 Pythonの整数にコンマを追加する最も簡単な方法は?_(http://stackoverflow.com/q/3909457/355230) – martineau