#python #formatting #currency
#python #форматирование #Валюта
Вопрос:
Итак, я пытался отформатировать валюту из некоторых чисел с плавающей запятой, которые представляют собой очень большие числа, например
spendings = [1204343.65, 1000000.01, 2310.08, 5.82]
Здесь, например, наиболее удобочитаемыми формами могут быть:
[$1.2M, $1M, $2.31K, $5.82]
Итак, что было бы наиболее подходящим способом для этого. locale и python-money не могут выполнить требуемое форматирование, поскольку они ставят запятые, но с их помощью не может быть достигнуто сжатие. Итак, есть ли способ, которым я могу сделать это так, чтобы оно было в наиболее читаемой форме. Я также наткнулся на множество ответов на StackOverflow, но ни один из них на самом деле не отвечает на то, чего я пытаюсь достичь.
Ответ №1:
Не всегда будет способ. Но вы должны найти способ:
def human_format(num):
num = float('{:.3g}'.format(num))
magnitude = 0
while abs(num) >= 1000:
magnitude = 1
num /= 1000.0
return '${}{}'.format('{:f}'.format(num).rstrip('0').rstrip('.'), ['', 'K', 'M', 'B', 'T'][magnitude])
Следовательно, применяя его к списку следующим образом:
spendings = [1204343.65, 1000000.01, 2310.08, 5.82]
[human_format(i) for i in spendings]
производит:
['$1.2M', '$1M', '$2.31K', '$5.82']
PS Некоторые ответы SO действительно помогли в этой функции. Я не могу его найти, но понравлюсь, как только сделаю