MyTetra Share
Делитесь знаниями!
Округление до десятков или до определенного числа [new]
Время создания: 16.03.2020 07:47
Текстовые метки: модуль, mod, округление
Раздел: !Закладки - VBA

Public Function RoundX(ByVal numberToRound As Double, _

ByVal roundBase As Integer)

RoundX = Round(numberToRound / roundBase + 0.5, 0) * roundBase

result = (numberToRound \ roundBase) * roundBase

If result Mod roundBase > 0 Then result = result + roundBase

'If result Mod roundBase > 0 Then result = result + roundBase

'if >>>numberToRound<<< mod roundBase > 0 then result = result + roundBase

End Function


Private Sub ResultEvent()

intMin = 123

ResultX = RoundX(intMin, 15)

End Sub


Есть функция, но работает она несколько неточно, задача в следующем - округлить до десятков, т.е. есть 3861 + 40% = 5 405,4:

Public Function RoundX(numberToRound As Double, roundBase As Integer)

RoundX = Round(numberToRound / roundBase + 0.5, 0) * roundBase

End Function


Private Sub ResultEvent()

ResultX = RoundX(5405.4, 10)

End Sub

Получили: 5410, тут все правильно. Переходим к следующему числу: 8700+40%=12180, функция тут выдает 12190, что неверно, ведь верно 12180. Сталкивался ли кто с универсальным решением данной задачи? Которое бы округляло до нужных десятков, сотен, тысяч.... всегда вверх. В случае с 8700 некоторое решение: вместо 0,5 подставлять 0,49999, но оно опять же, временное и в некоторых случаях при получении числа 5400.2, ставит 5400, что опять неверно, нужно 5410.


> kiv-1980, > ... Которое бы округляло до нужных десятков, сотен, тысяч.... всегда вверх.

result = ( numberToRound \ roundBase ) * roundBase

if result mod roundBase > 0 then result = result + roundBase


Обшыбка. В условии не та величина if >>>numberToRound<<< mod roundBase > 0 then result = result + roundBase


Указанная функция работает верно, нашел повторный раунд, все поправилось вопрос снят.

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования