2012-03-27 24 views
4

问题是如何将给定值舍入到给定因子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)。任何建议非常感谢!

回答

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

不起作用,因为我不相信它处理的情况下,其中x <1.0 :( – les2 2012-03-27 13:35:45

+0

这就是我正在努力,但...我会后的解决方案,我现在这似乎是工作 – les2 2012-03-27 13:36:03

+0

你投票给你帮助......谢谢! – les2 2012-03-27 13:37:29

相关问题