Округление

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Округление

Сообщение raros » 13.09.2004 (Пн) 10:18

Подскажите пожалуйста, каким оператором лучше округлять числа?
Мне необходимо округлять числа до сотых (Ex. 3.059706 -> 3.06)

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 13.09.2004 (Пн) 10:26

Попробуй FORMAT

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

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

Сообщение Ruslan Demidow » 13.09.2004 (Пн) 10:37

raros писал(а):Подскажите пожалуйста, каким оператором лучше округлять числа?
Мне необходимо округлять числа до сотых (Ex. 3.059706 -> 3.06)

Код: Выделить всё
Round(Округляемое число ,Количество знаков после запятой)

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 13.09.2004 (Пн) 11:09

Dim A As Single
Dim B As Single
Dim C As Single

Private Sub cbSTART_Click()
A = Val(tbA.Text)
B = Val(tbB.Text)
C = A * B
Round C, 2
lbC.Caption = C
End Sub


Что-то не получается?! В чём проблема?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2004 (Пн) 11:33

C=Round(A*B,2)
Lasciate ogni speranza, voi ch'entrate.

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Спасибо!

Сообщение raros » 13.09.2004 (Пн) 12:03

Alibec, спасибо! Но, не понятно, почему не идёт программа с моим кодом???

C = A * B
Round C, 2

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 13.09.2004 (Пн) 12:04

Im sorry, ALIBEK!

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 13.09.2004 (Пн) 13:32

raros писал(а):Dim A As Single
Dim B As Single
Dim C As Single

Private Sub cbSTART_Click()
A = Val(tbA.Text)
B = Val(tbB.Text)
C = A * B
Round C, 2
lbC.Caption = C
End Sub


Что-то не получается?! В чём проблема?

Round - не процедура, а функция, поэтому её параметры обязательно должны быть заключены в скобки.

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

:-)

Сообщение raros » 13.09.2004 (Пн) 13:58

Руслан, спасибо!

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 13.09.2004 (Пн) 15:25

Как сделать так, чтобы число округлялось до большего целого, в случае если его дробная часть не достигает границы округления до большего целого и округляет его в меньшую сторону?
ex. 4,165 -> 5, а не 4?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2004 (Пн) 16:05

Твой первый код (Round C, 2) работает. Просто Round это функция и она возвращает результат, округляя C до двух знаков. Но этот результат ты никуда не запоминаешь.

A = Fix(A) + Sgn(A-Fix(A)) - округление вверх.
A = Fix(A) - округление вниз.

Разумеется, при условии что A>0.
Lasciate ogni speranza, voi ch'entrate.

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 13.09.2004 (Пн) 16:16

Спасибо. ALIBEK!
что конкретно выполняет функция Sgn()

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2004 (Пн) 16:29

Sgn возвращает знак числа, -1 для отрицательных, 0 для 0 и +1 для положительных.
Lasciate ogni speranza, voi ch'entrate.

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 13.09.2004 (Пн) 17:24

Ещё раз, спасибо тебе ALIBEK!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.09.2004 (Пн) 21:02

Ruslan Demidow писал(а):Round - не процедура, а функция, поэтому её параметры обязательно должны быть заключены в скобки.

Ты неправ. Скобки нужны, только если возвращаемое значение участвует в выражении.
Изображение

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 13.09.2004 (Пн) 21:28

Пришел Я и решил итог подвести :)

Математические функции округления и др.:
Abs(x) - модуль
Int(x) - целая часть числа
Fix(x) - целая часть числа
*разница между Fix и Int в том, что если число отрицательное, Fix возвращает число, большее данного, а Int - меньшее, например, Fix(-8.4) = -8; Int(-8.4) = -9.
Round(x, y) - округляет число x до y знаков после запятой
Sgn(x) - знак числа (-1, если число отрицательное, 0 - если равно нулю и 1, если положительное).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.09.2004 (Пн) 22:50

Ещё есть функция CInt, выполняющая "бухгалтерсоке округление" (число с половиной округляется до чётного).
Кстати, Round(x, 0) ведёт себя точно так же.
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 14.09.2004 (Вт) 6:20

tyomitch писал(а):
Ruslan Demidow писал(а):Round - не процедура, а функция, поэтому её параметры обязательно должны быть заключены в скобки.

Ты неправ. Скобки нужны, только если возвращаемое значение участвует в выражении.

Сорри, не так выразился. :) ... Ну вы меня поняли. :wink:

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 14.09.2004 (Вт) 6:24

tyomitch писал(а):Ещё есть функция CInt, выполняющая "бухгалтерсоке округление" (число с половиной округляется до чётного).
Кстати, Round(x, 0) ведёт себя точно так же.

Есть ещё целочиленное деление :) Правда оно округляет всегда до целого.
Код: Выделить всё
msgbox 3 / 2 ' = 1,5
msgbox 3 \ 2 ' = 1

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 14.09.2004 (Вт) 11:24

Всем большое спасибо за информацию!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList