python人类可读的大数字

kev*_*vin 18 python

是否有一个python库,可以使这样的数字更具人性化

$ 187,280,840,422,780

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

Jan*_*nus 53

据我了解,你只想要"最重要"的部分.为此,请使用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])
Run Code Online (Sandbox Code Playgroud)

为一堆不同的数字运行上述函数:

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
Run Code Online (Sandbox Code Playgroud)

  • 结果应使用SI单位前缀表示,即千分校,兆美元,千兆等:) (4认同)
  • 我应该指出,使用Billion,Trillion在欧洲大陆并不像在美国那样.甚至英国直到最近才采用美国公约.请参见http://en.wikipedia.org/wiki/Long_and_short_scales (3认同)
  • 您应该使用“人性化”。参见https://pypi.org/project/humanize/ (2认同)

Les*_*ung 16

前几天是否有语言环境:

human_readable_number = "{:,}".format(100000000)
Run Code Online (Sandbox Code Playgroud)

在2.7中有更好的方法,请参阅PEP 378:千位分隔符的格式说明符以获取更多信息:

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

编辑(2014):这些天我有以下shell函数:

human_readable_numbers () {
    python2.7 -c "print('{:,}').format($1)"
}
Run Code Online (Sandbox Code Playgroud)

请享用!

  • `'{:,}'.format(x)` 是一种什么样的语法?我可以尝试一下,看看它是否有效,但我以前从未见过这种语法,那么,它是如何工作的? (2认同)
  • 它位于PEP-0378中:"',''选项表示逗号应作为千位分隔符包含在输出中.与不使用句点作为小数点的语言环境一样,使用不同约定进行数字分隔的语言环境将需要使用语言环境模块来获得适当的格式." (2认同)