2010-01-06 84 views
1

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

例如,如果结尾的数字应该是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和轮等,更多的“数学”的方法原因是我想在没有创建函数的情况下在SQL中执行它。

+0

重复:http://stackoverflow.com/questions/1555251/rounding-to-the-nearest-ending-digits – cjk 2010-01-06 10:40:00

+0

@ck - 想这个问题指的是PHP ,在这里我们正在处理Delphi或者SQL(@Svein,你可能想澄清一下)。 – 2010-01-06 10:41:12

+0

@Dominic - 实现是在PHP中,但是逻辑是通用的。 – cjk 2010-01-06 10:43:18

回答

1

怎么是这样的:

  1. 算的要舍入到“88”的数字位数=> N = 2
  2. 减去你的电话号码的后缀。
  3. 四舍五入到最接近的10^n(除以10^n,舍入为整数,乘以10^n)
  4. 添加后缀。

在SQL:

SELECT 
    CEIL(
     (num - suffix)/POW(10, LENGTH(suffix)) 
    ) * POW(10, LENGTH(suffix)) + suffix 
相关问题