我希望a四舍五入到13.95。我试过用圆形,但我得到:
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
有关标准库Decimal类的类似问题,请参阅How can I format a Decimal to always show 2 Decimal places?。
我希望a四舍五入到13.95。我试过用圆形,但我得到:
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
有关标准库Decimal类的类似问题,请参阅How can I format a Decimal to always show 2 Decimal places?。
当前回答
from decimal import Decimal
def round_float(v, ndigits=2, rt_str=False):
d = Decimal(v)
v_str = ("{0:.%sf}" % ndigits).format(round(d, ndigits))
if rt_str:
return v_str
return Decimal(v_str)
结果:
Python 3.6.1 (default, Dec 11 2018, 17:41:10)
>>> round_float(3.1415926)
Decimal('3.14')
>>> round_float(3.1445926)
Decimal('3.14')
>>> round_float(3.1455926)
Decimal('3.15')
>>> round_float(3.1455926, rt_str=True)
'3.15'
>>> str(round_float(3.1455926))
'3.15'
其他回答
内置round()在Python 2.7或更高版本中运行良好。
例子:
>>> round(14.22222223, 2)
14.22
查看文档。
我觉得最简单的方法是使用format()函数。
例如:
a = 13.949999999999999
format(a, '.2f')
13.95
这将产生一个浮点数,作为四舍五入到两个小数点的字符串。
只需使用此函数并将字节作为输入传递给它:
def getSize(bytes):
kb = round(bytes/1024, 4)
mb = round(kb/1024, 4)
gb = round(mb/1024, 4)
if(gb > 1):
return str(gb) + " GB"
elif(mb > 1):
return str(mb) + " MB"
else:
return str(kb) + " KB"
这是将数据大小从字节动态转换为KB、MB或GB的最简单方法。
要计算,我使用函数截断值也许对你有帮助
import math
def truncate(number, digits) -> float:
stepper = pow(10.0, digits)
return math.trunc(stepper * number) / stepper
print(truncate((0.1 + 0.2), 2))
正如Matt所指出的,Python 3.6提供了f字符串,它们也可以使用嵌套参数:
value = 2.34558
precision = 2
width = 4
print(f'result: {value:{width}.{precision}f}')
显示结果:2.35