你如何用浮点数舍入到给定因子的最接近倍数?

时间:2012-03-27 13:26:22

标签: java math floating-point ieee-754

问题是如何将给定值舍入到给定因子f的最近“几乎精确”倍数。例如:

如果f = 2.6,则每个“roundUp(x,2.6)”调用将从集合{0,+ / - 2.6,+ / - 2 * 2.6,+ / - 3 * 2.6,...中返回一个数字。 }

通常情况下,我的f是10的幂(电源为正或负)或1/2表示10的幂。

另一个例子:f = 0.001,应该舍入到0.001的最接近的整数倍,例如{0,+ / - 0.001,+ / - 2 * 0.001,+ / - 3 * 0.001}。

更新:我希望roundUp(x,f)的结果是结果的“上限”,也就是说,大于或等于x的倍数集中的最小元素(如果这是正确的方法,它吧)。请参阅下面的答案,了解一个不那么优雅的解决方案(这似乎适用于我可以通过的所有案例)。

我需要的只是一个不错的浮点逼近(在Java中使用double)。任何建议都非常感谢!

1 个答案:

答案 0 :(得分:13)

double roundUp(double x, double f) {
  return f * Math.ceil(x / f);
}