如何在python中将293.4662543之类的浮点数转换为293.47?

时间:2010-10-12 12:35:39

标签: python number-formatting

如何缩短我得到的浮动结果?点后面我只需要2位数。对不起,我真的不知道如何用英语更好地解释这个......

由于

8 个答案:

答案 0 :(得分:38)

来自浮点指南的Python cheat sheet

"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"

使用round()是错误的,因为浮点数是binary fractions,其中不能准确地表示十进制数字。

如果您需要使用十进制数字进行计算,请使用Decimal模块中的decimal类型。

答案 1 :(得分:18)

如果您想要一个号码,请使用round()功能:

>>> round(12.3456, 2)
12.35

(但迈克尔答案为+1 Decimal类型的+1。)

如果你想要一个字符串:

>>> print "%.2f" % 12.34567
12.35

答案 2 :(得分:6)

来自:  Python Docs round(x [,n]) 将浮点值x舍入为小数点后的n位数。如果省略n,则默认为零。结果是一个浮点数。数值四舍五入为10的最接近倍数,功率减去n;如果两个倍数相等,则舍入远离0(例如,round(0.5)为1.0,round(-0.5)为-1.0)。

注意浮点数的round()行为可能会令人惊讶:例如,round(2.675,2)给出2.67而不是预期的2.68。这不是一个错误:这是因为大多数小数部分不能完全表示为浮点数。有关详细信息,请参阅浮点运算:问题和限制。

看起来像圆(293.466 ...... [,2])会这样做,

答案 3 :(得分:5)

我希望这会有所帮助。

def do(*args):
    formattedList = [float("{:.2f}".format(num)) for num in args]
    _result =(sum(formattedList))
    result = round(_result,2)
    return result


print(do(23.2332,45.24567,67,54.27))

结果:

189.75

答案 4 :(得分:4)

x = round(293.4662543, 2)

答案 5 :(得分:3)

>>> print "%.2f" % 293.44612345
293.45

答案 6 :(得分:1)

如果您需要 2.3k 12M 等数字,此功能可以完成工作:

def get_shortened_integer(number_to_shorten):
    """ Takes integer and returns a formatted string """
    trailing_zeros = floor(log10(abs(number_to_shorten)))
    if trailing_zeros < 3:
        # Ignore everything below 1000
        return trailing_zeros
    elif 3 <= trailing_zeros <= 5:
        # Truncate thousands, e.g. 1.3k
        return str(round(number_to_shorten/(10**3), 1)) + 'k'
    elif 6 <= trailing_zeros <= 8:
        # Truncate millions like 3.2M
        return str(round(number_to_shorten/(10**6), 1)) + 'M'
    else:
        raise ValueError('Values larger or equal to a billion not supported')

结果:

>>> get_shortened_integer(2300)
2.3k # <-- str

>>> get_shortened_integer(1300000)
1.3M # <-- str

答案 7 :(得分:0)

一种方法:

>>> number = 1
>>> '{:.2f}'.format(number) #1.00
>>> '{:.3f}'.format(number) #1.000

第二种方式:

>>> '%.3f' % number #1.000
>>> '%.3f' % number #1.000

请参阅“格式化python”