将x舍入到最接近的y

时间:2014-02-25 14:27:10

标签: rounding

我有一个数字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,但它们似乎并不适用于所有情况下的工作。

2 个答案:

答案 0 :(得分:0)

一些伪代码让你的大脑进行巡回演出;)

for (i = (x - y) to x + y){
   if (i % y == 0){
     mark i
   }
}
get closest i

这会做到以下几点:

  • 它贯穿x + - y
  • 之间的“每个”数字
  • 将那些可以被y整除的东西没有剩余。正如在评论中已经提到的@ 2rs2ts一样,模运算符对浮点算术不起作用

在这种情况下,您可以尝试以下操作:

// 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;