是否有一个python库可以使这样的数字更具人性化
$ 187,280,840,422,780
编辑:例如,这个输出是187万亿不仅仅是逗号分隔。所以我希望输出为数万亿,数百万,数十亿等
答案 0 :(得分:44)
据我所知,你只想要“最重要”的部分。为此,请使用floor(log10(abs(n)))
获取位数,然后从那里开始。这样的事情,也许是:
import math
millnames = ['',' Thousand',' Million',' Billion',' Trillion']
def millify(n):
n = float(n)
millidx = max(0,min(len(millnames)-1,
int(math.floor(0 if n == 0 else math.log10(abs(n))/3))))
return '{:.0f}{}'.format(n / 10**(3 * millidx), millnames[millidx])
为一堆不同的数字运行上述函数:
for n in (1.23456789 * 10**r for r in range(-2, 19, 1)):
print('%20.1f: %20s' % (n,millify(n)))
0.0: 0
0.1: 0
1.2: 1
12.3: 12
123.5: 123
1234.6: 1 Thousand
12345.7: 12 Thousand
123456.8: 123 Thousand
1234567.9: 1 Million
12345678.9: 12 Million
123456789.0: 123 Million
1234567890.0: 1 Billion
12345678900.0: 12 Billion
123456789000.0: 123 Billion
1234567890000.0: 1 Trillion
12345678900000.0: 12 Trillion
123456789000000.0: 123 Trillion
1234567890000000.0: 1235 Trillion
12345678899999998.0: 12346 Trillion
123456788999999984.0: 123457 Trillion
1234567890000000000.0: 1234568 Trillion
答案 1 :(得分:12)
前几天是否有语言环境:
import locale
locale.setlocale(locale.LC_ALL, 'en_US')
locale.format('%d', 2**32, grouping=True) # returns '4,294,967,296'
在2.7中有更好的方法,请参阅PEP 378:千位分隔符的格式说明符以获取更多信息:
http://www.python.org/dev/peps/pep-0378/
编辑(2014):这些天我改为使用以下shell函数:
human_readable_numbers () {
python2.7 -c "print('{:,}').format($1)"
}
享受!
答案 2 :(得分:2)
这个数字对我来说似乎非常易读。一个不友好的号码是187289840422780.00。要添加逗号,您可以创建自己的函数或搜索一个(我找到this):
import re
def comma_me(amount):
orig = amount
new = re.sub("^(-?\d+)(\d{3})", '\g<1>,\g<2>', amount)
if orig == new:
return new
else:
return comma_me(new)
f = 12345678
print comma_me(`f`)
Output: 12,345,678
如果你想对一个数字进行舍入以使其更具可读性,那么就有一个python函数:round()
。
您可以更远离实际数据,并使用根据您的编程基准返回不同值的函数说“非常高的数量”或“超过100万亿”。
答案 3 :(得分:1)
来自here:
def commify(n):
if n is None: return None
if type(n) is StringType:
sepdec = localenv['mon_decimal_point']
else:
#if n is python float number we use everytime the dot
sepdec = '.'
n = str(n)
if sepdec in n:
dollars, cents = n.split(sepdec)
else:
dollars, cents = n, None
r = []
for i, c in enumerate(reversed(str(dollars))):
if i and (not (i % 3)):
r.insert(0, localenv['mon_thousands_sep'])
r.insert(0, c)
out = ''.join(r)
if cents:
out += localenv['mon_decimal_point'] + cents
return out
答案 4 :(得分:0)
如果用'可读'表示'单词';这是一个很好的解决方案,你可以适应。