Как мне «округлить» число до определенных цифр? - PullRequest
1 голос
/ 06 января 2010

Мне нужна математическая функция / формула / выражение, чтобы взять число в качестве параметра и найти наименьшее число, заканчивающееся определенными цифрами, которые больше, чем параметр.

Например, если конечные цифры должны быть 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, модами, раундами и т. Д. Причина в том, что я хочу сделать это в SQL без создания функций.

1 Ответ

1 голос
/ 06 января 2010

как насчет этого:

  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
...