Это - простая математика. Учитывая номер X и округляющийся фактор N, формула была бы:
раунд (X / N) *N
К раунду к самому близкому X (не будучи конкретным VBA)
Н = X * интервал (N / X + 0.5)
, Куда интервал (...) возвращает следующее самое низкое целое число.
, Если Ваша доступная функция округления уже округляется к самый близкий , целое число тогда опускает добавление 0,5
Для строгого подхода Visual Basic можно преобразовать значение с плавающей точкой в целое число к раунду к упомянутому целому числу. VB является одним из редких языков, который округляется на преобразовании типов (большинство других просто усекает.)
Кратные числа 5 или x могут быть сделаны просто путем деления прежде и умножения после раунда.
, Если бы Вы хотите к раунду и сохраняете десятичные разряды, Math.round (n, d) работал бы.
Просто РАУНД (X/5) *5 должен сделать задание.
Я не могу добавить комментарий, таким образом, я буду использовать это
в vbs, выполненном это, и весело проводить время, выясняя, почему эти 2 дают результат 2
, Вы не можете доверять раунду
msgbox round(1.5) 'result to 2
msgbox round(2.5) 'yes, result to 2 too
что-то как этот?
'nearest
n = 5
'n = 10
'value
v = 496
'v = 499
'v = 2348
'v = 7343
'mod
m = (v \ n) * n
'diff between mod and the val
i = v-m
if i >= (n/2) then
msgbox m+n
else
msgbox m
end if