【发布时间】:2011-04-24 07:18:25
【问题描述】:
如何缩短我得到的浮动结果?我只需要点后的 2 位数字。对不起,我真的不知道如何用英语更好地解释这个......
谢谢
【问题讨论】:
-
您想更改结果的值以供以后使用,还是只更改它转换成的十进制字符串?
如何缩短我得到的浮动结果?我只需要点后的 2 位数字。对不起,我真的不知道如何用英语更好地解释这个......
谢谢
【问题讨论】:
来自浮点指南的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 类型。
【讨论】:
如果你想要一个数字,使用round()函数:
>>> round(12.3456, 2)
12.35
(但迈克尔的回答 +1 回复Decimal 类型。)
如果你想要一个字符串:
>>> print "%.2f" % 12.34567
12.35
【讨论】:
来自: Python Docs 圆形(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。这不是错误:这是因为大多数小数部分不能完全表示为浮点数。有关详细信息,请参阅浮点运算:问题和限制。
看起来 round (293.466....[, 2]) 可以,
【讨论】:
我希望这会有所帮助。
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
【讨论】:
一种方式:
>>> number = 1
>>> '{:.2f}'.format(number) #1.00
>>> '{:.3f}'.format(number) #1.000
第二种方式:
>>> '%.3f' % number #1.000
>>> '%.3f' % number #1.000
见“格式化python”
【讨论】:
x = round(293.4662543, 2)
【讨论】:
>>> print "%.2f" % 293.44612345
293.45
【讨论】:
如果你需要像 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
【讨论】: