Тема: Округление
Скажите пожалуйста как округлить число?
Например 10,4 округлить до 11 ???
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Округление
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Скажите пожалуйста как округлить число?
Например 10,4 округлить до 11 ???
> Дарья
Не тестировал особо
Function UserRoundTo(n As Double, prec As Double) As Double Dim pos As Integer, c As String Dim a As Double, b As Double, s As Double c = CStr(n) pos = InStr(Trim$(c), ".") c = Left$(c, pos - 1) b = CDbl(c) s = n - b If Abs(s - 0.5) < prec / 2 Then a = b + prec ElseIf Abs(s - 0.5) > prec / 2 Then a = b + prec * 2 End If UserRoundTo = a End Function
Вызов:
MsgBox UserRoundTo(10.4, 1#)
~'J'~
> fixo
Я думала это будет выглядеть попроще.
Не работает.
А по другому никак нельзя???
Нет ли такой функции типа Abs, которая округляла бы число?
> fixo
Вот на этой строке выдает ошибку:
c = Left$(c, pos — 1)
> Дарья
Может заменить знак минуса, он отсюда
копируется как длинная черта
~'J'~
> fixo
c = Left$(c, pos — 1)
Invalid procedure call or argument (Error 5)
> Дарья
У тебя русские настройки стоят на разделитель десятичных
знаков? Я смотрю у тебя число через запятую
Обычно это точка
~'J'~
Может, у тебя в c разделитель получается не точка, а запятая? В коде предполагается, что точка:
pos = InStr(Trim$(c), ".")
Может, добавить что-то типа:
c = CStr(n) с = replace(c,",","")
> AlexV
В этой строке, как я понимаю, отправляется число с точкой:
MsgBox UserRoundTo(10.4, 1#)
> Дарья
Function UserRound(expr As Variant, Optional Num As Integer = 0) As Double If IsNumeric(expr) Then UserRound = (CLng(expr * Exp(Num * Log(10)))) / Exp(Num * Log(10)) If (expr - Fix(expr)) * 2 < 1 Then UserRound = UserRound + (10 ^ (-Num)) End If End If End Function
> Ingwar
> fixo
> AlexV
Зацените мой код:
Sub okr() Dim A As Double Dim B As Double Dim C As Double d = 9 / 2 A = Round(d, 1) MsgBox A C = Right(A, 1) / 10 MsgBox C B = A - C + 1 MsgBox B End Sub
не лучше так :)
a=10.4 round = Fix(a)<a?Fix(a+1):a
Это если округлять в большую сторону если, то отрицательных чисел
round = Fix(a)
смотря какая задача стоит :)
Была недавно аналогичная тема:
https://www.caduser.ru/forum/topic45599.html
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Округление
Форум работает на PunBB, при поддержке Informer Technologies, Inc