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
Указанная функция работает верно, нашел повторный раунд, все поправилось вопрос снят.