Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将长数字格式化为字符串_Python_Formatting_String_Integer - Fatal编程技术网

在python中将长数字格式化为字符串

在python中将长数字格式化为字符串,python,formatting,string,integer,Python,Formatting,String,Integer,在Python中,什么是将整数格式化为字符串的简单方法,用K表示千,用M表示百万,逗号后只留下两位数 我想显示7436313为7.44M,2345为2,34K 是否有一些%字符串格式运算符可用于此操作?或者,这只能通过在循环中实际除以1000并逐步构造结果字符串来实现?无字符串格式运算符。我从来没有听说过这样的事情,所以你可能不得不像你建议的那样自己滚。我认为没有格式运算符,但你可以简单地除以1000,直到结果在1到999之间,然后在逗号后使用格式字符串表示2位数字。在大多数情况下,单位是单个字

在Python中,什么是将整数格式化为字符串的简单方法,用K表示千,用M表示百万,逗号后只留下两位数

我想显示7436313为7.44M,2345为2,34K


是否有一些%字符串格式运算符可用于此操作?或者,这只能通过在循环中实际除以1000并逐步构造结果字符串来实现?

无字符串格式运算符。我从来没有听说过这样的事情,所以你可能不得不像你建议的那样自己滚。我认为没有格式运算符,但你可以简单地除以1000,直到结果在1到999之间,然后在逗号后使用格式字符串表示2位数字。在大多数情况下,单位是单个字符(或者可能是一个小字符串),您可以将其存储在字符串或数组中,并在每次除法后对其进行迭代。

我不知道有任何类似的内置功能,但下面有几个列表线程可能会有所帮助:


我认为没有内置函数可以做到这一点。你必须自己动手,例如:

def human_format(num):
    magnitude = 0
    while abs(num) >= 1000:
        magnitude += 1
        num /= 1000.0
    # add more suffixes if you need them
    return '%.2f%s' % (num, ['', 'K', 'M', 'G', 'T', 'P'][magnitude])

print('the answer is %s' % human_format(7436313))  # prints 'the answer is 7.44M'

我今天需要这个函数,为Python>=3.6的用户刷新了一点公认的答案:

def human_format(num, precision=2, suffixes=['', 'K', 'M', 'G', 'T', 'P']):
    m = sum([abs(num/1000.0**x) >= 1 for x in range(1, len(suffixes))])
    return f'{num/1000.0**m:.{precision}f}{suffixes[m]}'

print('the answer is %s' % human_format(7454538))  # prints 'the answer is 7.45M'
编辑:根据注释,您可能希望更改为
round(num/1000.0)

一个更“math-y”的解决方案是使用
math.log

from math import log, floor


def human_format(number):
    units = ['', 'K', 'M', 'G', 'T', 'P']
    k = 1000.0
    magnitude = int(floor(log(number, k)))
    return '%.2f%s' % (number / k**magnitude, units[magnitude])
测试:

>>> human_format(123456)
'123.46K'
>>> human_format(123456789)
'123.46M'
>>> human_format(1234567890)
'1.23G'

此版本不会出现以前答案中的错误,99999给出1000.0K。它也只允许3个有效数字,并消除了尾随的0

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])
输出如下所示:

>>> human_format(999999)
'1M'
>>> human_format(999499)
'999K'
>>> human_format(9994)
'9.99K'
>>> human_format(9900)
'9.9K'
>>> human_format(6543165413)
'6.54B'

可变精度且无999999错误:

def human_format(num, round_to=2):
    magnitude = 0
    while abs(num) >= 1000:
        magnitude += 1
        num = round(num / 1000.0, round_to)
    return '{:.{}f}{}'.format(round(num, round_to), round_to, ['', 'K', 'M', 'G', 'T', 'P'][magnitude])

我也有同样的需要。如果有人谈到这个话题,我找到了一个lib:


希望有帮助:)

我被其他人展示的一些东西弄糊涂了,所以我编写了下面的代码。它四舍五入到第二个小数点,例如“235.6亿”,但您可以通过将最后一行中的两个“100.0”替换为较大或较小的数字来更改小数点,例如“10.0”四舍五入到一个小数点,“1000.0”四舍五入到三个小数点。而且,使用这段代码,它总是从实际情况向下取整。如果愿意,您可以将“地板”替换为“天花板”或“圆形”

#make the dictionary to store what to put after the result (ex. 'Billion'). You can go further with this then I did, or to wherever you wish. 
#import the desired rounding mechanism. You will not need to do this for round. 
from math import floor
magnitudeDict={0:'', 1:'Thousand', 2:'Million', 3:'Billion', 4:'Trillion', 5:'Quadrillion', 6:'Quintillion', 7:'Sextillion', 8:'Septillion', 9:'Octillion', 10:'Nonillion', 11:'Decillion'}
def simplify(num):
    num=floor(num)
    magnitude=0
    while num>=1000.0:
        magnitude+=1
        num=num/1000.0
    return(f'{floor(num*100.0)/100.0} {magnitudeDict[magnitude]}')
最后一行中字符串前面的“f”是为了让python知道您正在格式化它。运行print(simplify(34867123012.13))的结果如下:

如果你有问题,请告诉我! 谢谢
Angus

999999显示1000.00K,此时应显示1M。您可以在编辑器中写入
long\u nr=1\u 000\u 000
,而不是
1000000
,Python将不考虑<代码> <代码>…999999当它应该说1M时显示1000.00 K。在我看来最好的方法是因为它不需要一个Roop999 99显示1000.00 K,当它应该说1M.更优雅:<代码> M= int(Madio.Log10(Num)// 3)< /Cord>这是唯一适合我工作的版本(没有恼人的尾随0)如果我希望格式为
'9_9K'
而不是
'9.9K'
,该怎么办?@AleB在之后使用replace函数替换。由于_milify还将9999999显示为最后一行的格式字符串,我认为您可以将
round(num,round_to)
替换为
num
,因为它已经被该点舍入。同样,99999在应该说
100万时显示
999.99千
。我知道,这也只能在Python3.6+上使用。是这样做的。对于我用过的这类游戏,我想这样做,这样你就可以一直拥有它所说的,而不是少一个,这样可以避免当你想买一些和你的基金所说的一样的东西时产生混乱,但你不能,因为实际的数字要低一个。您可以通过将地板()替换为圆形()来解决此问题。
34.86 Billion