我有一个数字x,我需要能够舍入到最近的y。
我需要一个算法作为函数f
,例如:
f(x,y) = output
f(1,3) = 0
f(4,2) = 4
f(3,5) = 5
f(3.2,0.3) = 3.3
等等。
我已经看到算法可以处理特定的x和特定的y,但它们似乎并不适用于所有情况下的工作。
答案 0 :(得分:0)
一些伪代码让你的大脑进行巡回演出;)
for (i = (x - y) to x + y){
if (i % y == 0){
mark i
}
}
get closest i
这会做到以下几点:
在这种情况下,您可以尝试以下操作:
// this checks, whether i and y currently have nothing after the decimal comma
// to ensure the modulo operator works correctly
until ((long)i * 10 == (long(i*10)) && (long)tempy * 10 == (long(tempy*10)))
i *= 10
tempy *= 10
increment some counter which is the power to 10 you have to recalculate to
并且在结果上你将不得不再次计算出来。
你必须根据y的值调整增量,这意味着如果y在1/1000区域,你将不得不增加0.001,以确保你得到每个理论上可能的数字。您将不得不评估逗号后面有多少位数,而不是y值本身
答案 1 :(得分:0)
我的公式取得了成功:
output = y * round(x/y);
哪个应该很容易转换成大多数编程语言
工作示例:
(x,y)=(3,5)
output = 5 * round(3/5) = 5 * round(0.6) = 5;