Python 小数点四舍五入到带步长的最小浮点

Python 小数点四舍五入到带步长的最小浮点,python,floating-point,rounding,Python,Floating Point,Rounding,我正在尝试用python中的步骤将小数四舍五入到最低浮点。例如,如果步长为0.01,则应将0.287四舍五入为0.28,并保持0.29。 问题是,当我将0.29舍入时,我的函数将打印0.28: int(0.29/0.01)*0.01 提前感谢您的帮助 编辑: 我找到了此问题的工作函数: def round_best(a, step): if abs(round(a/step)-(a/step))<0.00001: return round(a, -decimal.Decimal(

我正在尝试用python中的步骤将小数四舍五入到最低浮点。例如,如果步长为0.01,则应将0.287四舍五入为0.28,并保持0.29。 问题是,当我将0.29舍入时,我的函数将打印0.28:

int(0.29/0.01)*0.01
提前感谢您的帮助

编辑:

我找到了此问题的工作函数:

def round_best(a, step):
if abs(round(a/step)-(a/step))<0.00001:
    return round(a, -decimal.Decimal(str(step)).as_tuple().exponent)
else:
    return ((int(str(a/step).split('.')[0])) * step)
def round_最佳(a,步骤):
如果abs(圆形(a/步)-(a/步)为0.01->
如果您的数字包含最后2位小数

number = 2.9
stab = 0.05
c = ((int(str(number/stab).split('.')[0])) * stab)
print(c)

最后这将起作用

2.827应该四舍五入到2.82,因为我正在寻找较低的浮动!所有数字是否至少为两个十进制指针,但步长可以为0.05。因此,对于2.827,结果应该是2.8,对于2.85,结果应该是2.85.0.8,0.9,所有这些都不适用于2.9。它给出了2.85而不是2.9!“应该四舍五入到0.28,并且应该保持0.29”是什么意思?您是否要求从一个操作中得到两个结果?在最常用的浮点格式IEEE-754 binary64中,.29和.01都不可表示。最接近的可表示值为0.28999999999800159855567471822723747462999974365234375和0.01000000000000000020816681711721685113294309376702880859375。这就解释了为什么
int(0.29/.01)
给出28。包含这些类型错误的舍入数字是有问题的,正确的解决方案需要上下文您应该解释这些数字的来源,为什么需要舍入它们,以及允许多少计算错误。@EricPostChil请查看编辑!