Тема: Округление

Скажите пожалуйста как округлить число?
Например 10,4 округлить до 11 ???

Re: Округление

> Дарья
Не тестировал особо

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'~

Re: Округление

> fixo
Я думала это будет выглядеть попроще.
Не работает.
А по другому никак нельзя???
Нет ли такой функции типа Abs, которая округляла бы число?

Re: Округление

> fixo
Вот на этой строке выдает ошибку:
c = Left$(c, pos — 1)

Re: Округление

> Дарья
Может заменить знак минуса, он отсюда
копируется как длинная черта
~'J'~

Re: Округление

> fixo
Пробовала. Заменила. Все равно выдает ошибку.

Re: Округление

> fixo
c = Left$(c, pos — 1)
Invalid procedure call or argument (Error 5)

Re: Округление

> Дарья
Попробуй удали знак бакса:
c = Left(c, pos — 1)

Re: Округление

> Дарья
У тебя русские настройки стоят на разделитель десятичных
знаков? Я смотрю у тебя число через запятую
Обычно это точка
~'J'~

Re: Округление

Может, у тебя в c разделитель получается не точка, а запятая? В коде предполагается, что точка:
pos = InStr(Trim$(c), ".")
Может, добавить что-то типа:

c = CStr(n)
с = replace(c,",","")

Re: Округление

Тьфу,

с = replace(c,",",".")

Re: Округление

> fixo
Убрала. Ничего не изменилось

Re: Округление

> AlexV
Тоже не получается

Re: Округление

> AlexV
В этой строке, как я понимаю, отправляется число с точкой:
MsgBox UserRoundTo(10.4, 1#)

Re: Округление

> AlexV
А у Вас идет этот код???

Re: Округление

> fixo
А у Вас работает???

Re: Округление

> Дарья
Не знаю что думать у меня работает

Re: Округление

> fixo
Может на 2009 автокаде не идет.

Re: Округление

> fixo
А попроще нет никакой функции для округления???

Re: Округление

> Дарья

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

Re: Округление

> 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

Re: Округление

a=10.4
round = CInt(a)<a?CInt(a)+1:a

Re: Округление

не лучше так :)

a=10.4
round = Fix(a)<a?Fix(a+1):a

Это если округлять в большую сторону если, то отрицательных чисел

round = Fix(a)

смотря какая задача стоит :)

Re: Округление

Была недавно аналогичная тема:
https://www.caduser.ru/forum/topic45599.html