Как отформатировать валюту в ее наиболее читаемой форме python

#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 действительно помогли в этой функции. Я не могу его найти, но понравлюсь, как только сделаю