首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python人类可读的大数

python人类可读的大数
EN

Stack Overflow用户
提问于 2010-07-01 08:54:50
回答 5查看 56.5K关注 0票数 41

有没有一个python库可以让这样的数字更易读?

187,280,840,422,780美元

编辑:例如,这个的输出是187万亿,而不仅仅是逗号分隔。所以我希望输出是万亿、数百万、数十亿等等

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-01 12:05:19

据我所知,你只想要“最重要”的部分。要执行此操作,请使用floor(log10(abs(n)))获取位数,然后从那里开始。可能是这样的:

代码语言:javascript
复制
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])

对一组不同的数字运行上面的函数:

代码语言:javascript
复制
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
票数 83
EN

Stack Overflow用户

发布于 2011-10-06 11:54:46

(编辑:不敢相信我会在2019年更新我的答案,并在2020年再次更新!)这证明了人类进化的下一个阶段是通过互联网分享知识!)

对于Python2.7+或v3,您只需在字符串格式中使用",“选项:

代码语言:javascript
复制
>>> "{:,}".format(100000000)
'100,000,000'

有关详细信息,请参阅PEP 378:千位分隔符的格式说明符:

http://www.python.org/dev/peps/pep-0378/

对于Python3.6+,您还可以使用"_“格式:

代码语言:javascript
复制
>>> "{:_}".format(100000000)
'100_000_000'

请参阅PEP 515了解详细信息:

https://www.python.org/dev/peps/pep-0515/

2014年添加:这些天我有以下shell函数:

代码语言:javascript
复制
human_readable_numbers () {
    python2.7 -c "print('{:,}').format($1)"
}

这样我就不用睁大眼睛看大数字了。

停在这里,除非你在阅读这篇文章时不幸地使用了2.7之前的代码或没有Python2.7的环境……

您也可以使用locale执行此操作:

代码语言:javascript
复制
import locale
locale.setlocale(locale.LC_ALL, 'en_US')
locale.format('%d', 2**32, grouping=True)   # returns '4,294,967,296'

希望这能有所帮助!

票数 40
EN

Stack Overflow用户

发布于 2010-07-01 09:02:30

对我来说,这个数字看起来很人性化。不友好的数字将是187289840422780.00。要添加逗号,您可以创建自己的函数或搜索一个(我找到了this):

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3154460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档