python人类可读的大数字
有没有一个python库可以让像这样的数字更具可读性 187280840422780美元 编辑:例如,我希望它的输出是187万亿,而不仅仅是逗号分隔的。因此,我希望产量达到万亿、数百万、数十亿等,来自:python人类可读的大数字,python,Python,有没有一个python库可以让像这样的数字更具可读性 187280840422780美元 编辑:例如,我希望它的输出是187万亿,而不仅仅是逗号分隔的。因此,我希望产量达到万亿、数百万、数十亿等,来自: 对我来说,这个数字似乎很容易让人读懂。不友好的电话号码是187289840422780.00。要添加逗号,您可以创建自己的函数或搜索一个(我发现): 重新导入 定义逗号(金额): 原始=金额 new=re.sub(“^(-?\d+)(\d{3})”,“\g\g”,金额) 如果原始==新的: 还新
对我来说,这个数字似乎很容易让人读懂。不友好的电话号码是187289840422780.00。要添加逗号,您可以创建自己的函数或搜索一个(我发现):
重新导入
定义逗号(金额):
原始=金额
new=re.sub(“^(-?\d+)(\d{3})”,“\g\g”,金额)
如果原始==新的:
还新
其他:
返回逗号_me(新)
f=12345678
打印逗号(`f`)
产出:12345678
如果您想对一个数字进行四舍五入以使其更具可读性,那么有一个python函数用于此:round()
您可以更进一步地远离实际数据,使用一个基于编程基准返回不同值的函数说“非常高的数量”或“超过100万亿”。如果“可读”是指“文字”;这里有一个很好的解决方案,您可以进行调整
据我所知,你只想要“最重要”的部分。为此,请使用
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
(编辑:不敢相信我会在2019年和2020年更新我的答案!这证明了人类进化的下一个阶段是通过互联网共享知识!)
对于Python2.7+或v3,您只需在字符串格式中使用“,”选项:
“{:,}”格式(100000000)
'100,000,000'
有关更多信息,请参阅PEP 378:千位分隔符格式说明符:
在Python3.6+中,您还可以使用“\ux”格式:
>>“{:}”。格式(100000000)
'100_000_000'
详见PEP 515:
2014年新增:现在我有以下shell功能:
human_readable_numbers () {
python2.7 -c "print('{:,}').format($1)"
}
所以我不必眯着眼睛看大数字
请停在这里,除非您在阅读本文时不幸使用了2.7之前的代码或没有使用Python 2.7的环境
您也可以使用区域设置执行此操作:
导入区域设置
setlocale(locale.LC_ALL'en_US')
locale.format('%d',2**32,grouping=True)#返回'4294967296'
希望这有帮助 安装clisp并编写以下命令:
(格式为t“~r”(解析整数(读取行*标准输入*))
然后使用子进程调用clisp prettynum.cl 187000000000000
。。。虽然我刚刚询问了一个替代方案,但它似乎完全符合OP的要求。请检查一下,我使用带有一行代码的millify软件包获得了我想要的效果(例如,11232222到11.23米)millify(_数,精度=2)
。我可能应该指出,在欧洲大陆使用十亿,万亿并不意味着和在美国一样。就连英国也直到最近才采纳美国公约。请看,结果应该用国际单位制前缀表示,即千美元、兆美元、千兆美元等:)@tzot LOL但这是我可以习惯的。很好!仅供参考,上述内容不适用于0,但很容易检查您是否应该使用“人性化”。查看“{:,}”是哪种语法。格式(x)
?我可以尝试一下,看看它是否有效,但我以前没有见过这种语法,那么,它是如何工作的呢?它在PEP-0378中:“,”选项表示输出中应包含逗号作为千位分隔符。对于不使用句点作为小数点的区域设置,使用不同的数字分隔约定的区域设置将需要使用区域设置模块来获得适当的格式!
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
human_readable_numbers () {
python2.7 -c "print('{:,}').format($1)"
}