如何“舍入”某个数字以某些数字结尾?

时间:2010-01-06 10:36:53

标签: math rounding

我需要一个数学函数/公式/表达式来取一个数字作为参数,找到以某些大于参数的数字结尾的最小数字。

例如,如果结束数字应为88,则这些是我想要的一些例子:

f(0) = 0
f(87) = 88
f(88) = 88
f(89) = 188  //NB: NOT 88*2=176
f(187) = 188
f(188) = 188
f(189) = 288

等等。你明白了。

到目前为止,我已经使用了一个函数(在Delphi中,我没有实现)这样做:

function RoundToSpecificEndingDigits(aLength,aModMeasure : double) : double;
begin
  Result := aModMeasure;
  while Result < aLength do Result := Result + 100;
end;

现在我需要一个更加“数学”的方法,包括div和mods和rounds等。原因是我想在SQL中完成而不创建函数。

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

  1. 计算要舍入的位数为“88”=&gt; n = 2
  2. 从您的号码中减去后缀。
  3. 向上舍入到最接近的10 ^ n(除以10 ^ n,舍入为整数,乘以10 ^ n)
  4. 添加后缀。
  5. 在SQL中:

    SELECT
        CEIL(
            (num - suffix) / POW(10, LENGTH(suffix))
        ) * POW(10, LENGTH(suffix)) + suffix