Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 Еще раз про округление  [new]
Molasar
Member

Откуда:
Сообщений: 369
Читал я предыдущие статьи. Все пишут о сложном. Объясните плз на простом примере.

Таблица. В таблице поле тип money. В это поле помещается результат деления других полей.
Например, 196,70 / 100 * 15 = 29,505 (в ячейке при просмотре в режиме таблицы 29,51 при нажатии на ячейку открывается 29,505)
Как сделать так что бы поле фактически содержало 29,51 , а не показывало округление?

Не подходит:
1. round((196,70 / 100 * 15),2) = 29.50
2. format((196,70 / 100 * 15),"0.00") = 29.50 ("standart", "fix") - тоже самое
3. RoundForBank((196,70 / 100 * 15),2,false) = 29.505 это приведенная пользователем Allll_ функция.

Так как же добиться математического фактического округления как в Excel 2003 ОКРУГЛ()???
13 фев 08, 00:34    [5280652]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
FAndrew
Member

Откуда: SPb
Сообщений: 525
Да уж. Действительно ведет себя очень смешно. Хотя можно догадаться почему.
Самый простой способ избавиться от этого добавить к результату 0.0005.
13 фев 08, 10:27    [5281587]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
Letter_D
Member

Откуда:
Сообщений: 438
У меня format отрабатывает нормально:
format((196.70 / 100 * 15),"0.00") = 29.51
13 фев 08, 10:52    [5281857]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
gjghjc
Member

Откуда: БАЛАКЛАВА!!!!
Сообщений: 389
Я валяюсь
автор
Хотя функция Round полезна для возвращения номера с указанном числом десятичных знаков, Вы не можете предсказать, как будет выполненно округление, когда округляемая цифра равна 5. Как VB округляет число зависит от внутреннего двоичного представления переданного аргумента.

Взято отсюда


С уважением, Николай.
13 фев 08, 11:04    [5281995]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
gjghjc
Member

Откуда: БАЛАКЛАВА!!!!
Сообщений: 389
Letter_D
У меня format отрабатывает нормально:
format((196.70 / 100 * 15),"0.00") = 29.51

Подтверждаю, только что проверил у себя
13 фев 08, 11:06    [5282025]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
Letter_D
Member

Откуда:
Сообщений: 438
автор
Хотя функция Round полезна для возвращения номера с указанном числом десятичных знаков, Вы не можете предсказать, как будет выполненно округление, когда округляемая цифра равна 5

Округляет в сторону ближайшего четного, специальный математический прием в статистике...
13 фев 08, 11:13    [5282119]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
Molasar
Member

Откуда:
Сообщений: 369
Странно, то работает, то нет.
Может зависит от типа поля в таблице, т.к. данные для вычислений берутся из базы.

А вариант в чистом виде:
format((196.70 / 100 * 15),"0.00") = 29.51 - работает!!!

Буду тестировать.
13 фев 08, 13:36    [5283632]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз про округление  [new]
Deggasad
Member

Откуда: Воронеж
Сообщений: 3484
Тут тоже было Round от VBA глючит похоже.
14 фев 08, 12:53    [5289735]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Еще раз про округление  [new]
Vitos4545
Guest
Может попробовать сначала переменной присвоить (196.70 / 100 * 15) получится:
a = (196.70 / 100 * 15)
format (a,"0.00")
9 апр 10, 11:07    [8603026]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить