|
|
|
| Здравствуйте! У меня возникла небольшая проблема которую пока
решить не получается. Существует два запроса которые должны выдавать одинаковые результаты.
Первый запрос считает результат таким образом:
round(6.7725,2)-round(1.7625,2)-round(1.6650,2)-round(1.6800,2)
в итоге получается 1.66
второй запрос:
round(2.22*0.75,2)
в итоге получается 1.67
разница выходит в том что результатом функции round(1.7625,2) является 1.76 и это понятно
что сервер отбрасывает четвёртый знак при округлении, т.е. не учитывает при округлении.
Вопрос в том правильно ли такое округление и можно ли как то изменить поведение сервера?
Потому что мне нужно чтобы round(1.7625,2) было равно 1.77
P.S. должен уточнить что эти два запроса используют одни и те же данные и разницы не
должно быть, а таким образом иногда набегает разница до 10 сотых, что не допустимо | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 08:09)
| | считайте в копейках
или даже в процентах копейки. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2010 в 08:30)
| | ? не понял | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 08:50)
| | сумма округлений станет гарантированно равна округлению суммы только в том случае, когда округление перестанет менять значение. То есть в случае целых чисел.
Вот и выражайте свою величину в целых числах. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2010 в 08:59)
| | >Вот и выражайте свою величину в целых числах.
результатом запроса является математическое выражение (используются функции деления и умножения), вот здесь и происходит отклонение, погрешность округления
т.е. даже если я и буду использовать целые числа, при вычислении определённых показателей нужно будет производить последовательное умножение/деление, а сервер в таком случае числа представляет как например 3.33333333333333333 | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 09:07)
| | умножение целых всегда будет целым.
А деление ... придется задать в модели явные правила округления для него. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2010 в 09:10)
| | >А деление ... придется задать в модели явные правила округления для него.
а можно поподробнее? это как? | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 09:18)
| | я ж не знаю, что у Вас за деление применяется в задаче... | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 08:09)
| | что сервер отбрасывает четвёртый знак при округлении, т.е. не учитывает при округлении.
все там учитывается былоб там 1.7655 то и получили бы 1.77
вообще только недавно была тема по округлениям, можно погуглить о том как настраивать округление.
но мне кажется что проблема всетаки в вашей матиматике. где-то что-то Вы упустили, отсюда и погрешность. | |
|
|
|
|
|
|
|
для: Valick
(13.08.2010 в 09:09)
| | >былоб там 1.7655 то и получили бы 1.77
как вы могли заметить там 1.7625 а не явное 1.7655, т.е. последняя 5 влияет на изменение третьего знака, а он соответственно на изменение второго | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 09:20)
| | извините привёл неверный пример не 1.7625 а 1.7645 | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 09:39)
| | да без разницы...
от 0 до 4 округление в меньшуу сторону, от 5 до 9 в большую сторону и не важно какие цыфры стоят после того знака перед которым нужно осуществить округление.
http://softtime.ru/forum/read.php?id_forum=3&id_theme=74302 | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 09:39)
| | round(6.7725,2)-round(1.7625,2)-round(1.6650,2)-round(1.6800,2)
а теперь внимательно следим за моими действиями
round(6.7725-1.7625-1.6650-1.6800,2) = ?
__
по поводу того что сервер отбрасывает четвертый знак и не учитывает его, да это так, я просто думал что округляем до трех знаков а не до двух | |
|
|
|
|
|
|
|
для: Valick
(13.08.2010 в 10:27)
| | >по поводу того что сервер отбрасывает четвертый знак и не учитывает его
это был основной вопрос :) посмотрел у оракула аналогично
просто получается что при разных формулах расчёта (в одной есть деление в другой нет) на равных источниках данных получается разный результат, из-за такого округления, а должно быть одинаково | |
|
|
|
|
|
|
|
для: ronin80
(13.08.2010 в 12:45)
| | может быть разное количество округлений?
в примере который Вы привели четыре против одного | |
|
|
|
|
|
|
|
для: Valick
(13.08.2010 в 12:50)
| | именно! из-за разной группировки данных | |
|
|
|