Тема: Неправильно работает функция округления - Round ?!!!

Есть проблема с функцией Round.
При использовании она не правильно округляет значения, вернее не всегда правильно.
Например:
    a = Round (23.35, 1) возвращает число 23.4, что верно, но
    a = Round (23.345, 2) возвращает 23.34, а не 23.35 !!!!,
опять же:
     a = Round (23.335, 2) возвращает правильное 23.4
Посоветуйте что делать. Или может у кого есть альтернативный подход к округлению чисел?

Re: Неправильно работает функция округления - Round ?!!!

IMHO, это "дыра" в VBA. Например, у меня (ACAD 2005 English)
Round (23.345, 2) возвращает 23.35, но Round (23.3451, 3) - 23.346!!!!!!!!!!!
Вполне возможно, что такая же беда, как и с Eval

Re: Неправильно работает функция округления - Round ?!!!

При округлении
a = Round (23.345, 2) возвращает 23.34, а не 23.35, потому что 3 цифра является пятёркой (серединкой), а округляемый разряд при увеличении на единицу может стать нечётным числом. Поэтому единица не прибавляется чтобы при округлении 5 округляемый разряд всегда был чётным числом. Поэтому округление:
a = Round (23.345, 2) = 23.34 Правильное!
А то что написала Sigma я считаю враньём. Такого быть не может и у меня никогда не было. Она просто что то напутала
Round (23.3451, 3) = 23.345
В VBA запустите процедуру:
Sub MsgRound()
   MsgBox "Round(23.345, 2)=" & Round(23.345, 2)
   MsgBox "Round(23.3451, 3)=" & Round(23.3451, 3)
End Sub
и убедитесь!

Re: Неправильно работает функция округления - Round ?!!!

2 Миша:
Да-а, крутой дядя:
"то, что у меня никогда не было, того и быть и может, то все вранье и путаница.... я-то ведь не кто-то другой, поэтому и спутать ничего не могу ..."

Re: Неправильно работает функция округления - Round ?!!!

Господа, позвольте цитату из справочника по математике:
"П р а в и л о 3: Если отбрасывается цифра 5, а за ней нет значащих цифр, то округление производится на ближайшее четное число (прав Миша). Применяя указанное правило к одному числу, мы не увеличиваем точность вычисления, но при многочисленных округлениях ...  взаимная компенсация погрешностей обеспечит наибольшую точность результата.
Правило 3 можно изменить и округлять всегда на ближайшее нечетное число. Точность будет та же, но четные цифры удобнее, чем нечетные"

Re: Неправильно работает функция округления - Round ?!!!

Спасибо Leonid!
Следующий код:

Sub MsgRound()
   MsgBox "Round(23.345, 2)=" & Round(23.345, 2)
   MsgBox "Round(23.3451, 2)=" & Round(23.3451, 2)
   MsgBox "Round(23.3451, 3)=" & Round(23.3451, 3)
End Sub

доказывает, что всё дело в том есть ли после пятёрки значащие цифры. А именно обратите внимание на слова: "...а за ней нет значащих цифр..." в комментарии Leonida. (Это очень здорово, что Leonid подчеркнул именно эту особеность)
При первом округлении VBA получается ответ: 23,34
в втором - 23,35 (это потому что после пятёрки есть значащие цифры, значит правило 3 Leonida действует в VBA), в третьем случае - 23.345 но ни как ни 23,346.
Уважаемый Sigma! Приведи пожалуйста пример кода у тебя получалось 23,346. На это очень интересно посмотреть, может там использовались какие-то другие функции. Скорее всего у тебя наверное были значащие цифры после пятёрки и ты просто забыл какие. Извини если чем обидел.

Re: Неправильно работает функция округления - Round ?!!!

Хотите чтоб норм округляло юзайте функцию.. зы смотрите.. ссыль
http://support.microsoft.com/default.as … -us;225330

Re: Неправильно работает функция округления - Round ?!!!

Прочитал, понимаю что давно было, но хотелось бы вставить свою ложку дегтя :))
Читаем:
http://ru.wikipedia.org/wiki/Округление
Где конкретно написано, что математическое!!! округление - это только по принципу увеличения 0.5 в большую сторону (функция round).
Все остальное тоже округление, но не математическое. В данном случае настаивалось на банковском округлении, которое правильно при банковских, но не математических вычислений :)
Как это реализовано в других программах:
http://delphikingdom.ru/asp/viewitem.asp?catalogid=1218