Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2012, 18:01   #1
frajj
 
Регистрация: 02.03.2012
Сообщений: 4
Вопрос Странное поведение функции Sum в запросе с групировкой

Здравствуйте!
Помогите разобраться, пожалуйста!
Я полдня уже гуглю, но так и не нашел решения.

Есть таблица:

|id | value
| 1 | 10
| 1 | -0,2
| 1 | -0,1
| 1 | -0,7
| 1 | -9
| 2 | 2,302
| 2 | -0,08
| 2 | -0,01
| 2 | -0,02
| 2 | -0,092
| 2 | -2,1

в запросе использую групировку по полю id и Sum по value.
Вот результат виполнения запроса.

|id | value
|1 |1,77635683940025E-15
|2 |0

Откуда берется число 1,77635683940025E-15 граничащае с нулем?
frajj вне форума Ответить с цитированием
Старый 18.07.2012, 20:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это погрешность процессора. Он точно не умеет считать.
Когда-то слышал такой совет: Попробуй к сумме прибавлять 0,0000001 чтоб выравнивать как-то эту погрешность. Кому-то если память не прошибает помогло...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.07.2012, 09:38   #3
frajj
 
Регистрация: 02.03.2012
Сообщений: 4
По умолчанию

Если прибавлять 0,0000001, то получается 0,0000001 там где должен бить ноль, так не катит.

Ничего лутшего я не придумал как:
написал еще один запрос, которий округляет суму, и округление делаю вот так
Код:
CDbl(Format([value];"#,###0.000"))
, потому что стандарний Round округляет по каким то банковским правилам, и результат не всегда совпадает с ожидаемым.
frajj вне форума Ответить с цитированием
Старый 19.07.2012, 13:02   #4
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

Странно, а у меня работает.
Пример:
Код:
Round(Sum([Таблица1]![value]);2)
gluk_fm вне форума Ответить с цитированием
Старый 19.07.2012, 15:35   #5
frajj
 
Регистрация: 02.03.2012
Сообщений: 4
По умолчанию

Да, она работает, но не всегда правильно. Я уже с этим сталковался, долго об стену бился пока понял в чем дело.
Когда нада математическое округление лутше взять Format

Глянь здесь http://www.cyberforum.ru/vba/thread496633.html
frajj вне форума Ответить с цитированием
Старый 19.07.2012, 17:50   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте frajj.
"..Ничего лучшего я не придумал как:.."
Возможно и будет лучше если использовать следующее выражение:
Sum([value]*1000)/1000
но только при условии : формат поля value - Двойное с плавающей точкой
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 20.07.2012, 09:02   #7
frajj
 
Регистрация: 02.03.2012
Сообщений: 4
По умолчанию

Здравствуйте Teslenko_EA.
Действительно так лутше. Спасибо!
frajj вне форума Ответить с цитированием
Старый 24.07.2012, 12:07   #8
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

Здравствуйте!
Я как то тоже задумался, откуда берётся столько знаков после запятой.
Почитайте как хранятся десятичные числа с плавающей точкой.
Woodlin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение функции работы с массивом(шаблон) РагнаР Общие вопросы C/C++ 4 17.03.2011 00:30
Странное поведение чисел.... sult9191 Общие вопросы по Java, Java SE, Kotlin 2 20.01.2011 17:12
Странное поведение gets alex_alpha Общие вопросы C/C++ 3 27.03.2010 18:21
Странное поведение null Vitalyk JavaScript, Ajax 6 13.02.2010 15:22
Странное поведение базы yulia БД в Delphi 7 22.04.2009 07:15