如何缩短我得到的浮动结果?点后面我只需要2位数。对不起,我真的不知道如何用英语更好地解释这个......
由于
答案 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”