Math “我该怎么做?”;“圆形”;以特定数字结尾的数字?

Math “我该怎么做?”;“圆形”;以特定数字结尾的数字?,math,rounding,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 RoundToSpecificEndingD

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

例如,如果结尾数字应为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;
函数四舍五入到指定的数字(长度、数量测量值:双精度):双精度;
开始
结果:=数量测量值;
而结果<第1个do结果:=结果+100;
结束;

现在我需要一种更“数学”的方法来处理div、mod和rounds等。原因是我想在SQL中实现它,而不创建函数。

类似这样的方法如何:

  • 计算要舍入到“88”=>n=2的位数
  • 从你的数字中减去后缀
  • 四舍五入到最接近的10^n(除以10^n,四舍五入到整数,再乘以10^n)
  • 添加后缀
  • 在SQL中:

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

    像这样的怎么样:

  • 计算要舍入到“88”=>n=2的位数
  • 从你的数字中减去后缀
  • 四舍五入到最接近的10^n(除以10^n,四舍五入到整数,再乘以10^n)
  • 添加后缀
  • 在SQL中:

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

    重复:@ck-认为这个问题是指PHP,这里我们处理的是Delphi或SQL(@Svein,你可能想澄清哪个)。@Dominic-实现是用PHP实现的,但是逻辑是通用的。PHP实现的问题(不管逻辑如何)是它是一个_算法,而不是一个数学表达式。nickf的答案是一个数学表达式,因此满足了我的需要。重复:@ck-认为这个问题是指PHP,这里我们处理的是Delphi或者SQL(@Svein,你可能想澄清哪个)。@Dominic-实现是用PHP实现的,但是逻辑是通用的。PHP实现的问题是(然而合乎逻辑的)是它是一个_算法,而不是一个数学表达式。nickf的答案是一个数学表达式,因此满足了我的需要。