按给定精度舍入浮点数
Round a floating point number by a given precision
我需要通过指定的 precision
获取 qty
号码,如下所示:
qty = 0.1284
precision = 0.01
output = 0.12
好像很简单,买我没搞定,因为我有一个precision
上面的变量
浮动数学不精确 - 请参阅 Is floating point math broken?。
您可以使用 round() 进行舍入 - 虽然您似乎想要截断 - 您可以用数学方法做到这一点:
qty = 0.1284
precision = 0.01
truncated = ((qty * (1/precision)) // 1 ) * precision
print(truncated)
输出:
0.12
这会将您的数字与正确的因子相乘,整数除以 1 以去除剩余的部分数字,然后再次乘以精度以返回您的浮点值。
我是这样操作的。
def get_qty(qty, step_size):
prec = 0
if(step_size >= 1):
return int(qty)
while(step_size < 1):
step_size *= 10
prec += 1
qty = "{:0.0{}f}".format(qty, prec)
return float(qty)
get_qty(181.1231231221, 0.01)
get_qty(181.1231231221, 1.0)
我需要通过指定的 precision
获取 qty
号码,如下所示:
qty = 0.1284
precision = 0.01
output = 0.12
好像很简单,买我没搞定,因为我有一个precision
上面的变量
浮动数学不精确 - 请参阅 Is floating point math broken?。
您可以使用 round() 进行舍入 - 虽然您似乎想要截断 - 您可以用数学方法做到这一点:
qty = 0.1284
precision = 0.01
truncated = ((qty * (1/precision)) // 1 ) * precision
print(truncated)
输出:
0.12
这会将您的数字与正确的因子相乘,整数除以 1 以去除剩余的部分数字,然后再次乘以精度以返回您的浮点值。
我是这样操作的。
def get_qty(qty, step_size):
prec = 0
if(step_size >= 1):
return int(qty)
while(step_size < 1):
step_size *= 10
prec += 1
qty = "{:0.0{}f}".format(qty, prec)
return float(qty)
get_qty(181.1231231221, 0.01)
get_qty(181.1231231221, 1.0)