Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Вниз

Почему IBase не делает того что нужно???   Найти похожие ветки 

 
Sirus   (2002-10-16 10:13) [0]

Привет Мастера... Есть недоумение такое...
У меня есть SQL команда:
insert into SUBS_PAY
(PAY_SUMM, PAY_NDS)
values (123.12, 234.23)

Вроде все идет хорошо, команда выполняется 96 раз
естественно с различными values...
Но вот когда команда выполняется в 97 раз в таблицу записываются не совсем правильные данные... т.е. вместо числа 654.65 записывается 654.6499999999.... Тип поля NUMERIC(15,2)
длина неправильного числа вместе с точкой 15 символов...
Почему так происходит??? И как лечить???


 
Johnmen   (2002-10-16 10:35) [1]

Регулярный вопрос ! :)))
Регулярный ответ - погрешность разрядной сетки....


 
Sergey13   (2002-10-16 10:37) [2]

Писать свою (или использовать готовую) UDF на округление и вставлять ее в тригеры. Не умеет ИБ нормально числа хранить.


 
Johnmen   (2002-10-16 10:47) [3]

>Sergey13 © (16.10.02 10:37)
>Не умеет ИБ нормально числа хранить

Хранит абсолютно нормально !


 
Sergey13   (2002-10-16 11:01) [4]

2Johnmen © (16.10.02 10:47)
>Хранит абсолютно нормально !
Только клиенту отдает хреново 8-)

То-то каждую неделю этот вопрос поднимается и именно по ИБ. А вот по другим базам я что то не встречал подобных вопросов. И сам с такими траблами не сталкивался. Только на ИБ.


 
Johnmen   (2002-10-16 11:06) [5]

>Sergey13 © (16.10.02 11:01)

Отдает, как хранит...:)))
А клиент пусть сам думает, как это понимать. :-)
Зато скорость работы с полями а-ля float максимально высока !


 
Sirus   (2002-10-16 11:10) [6]

По моему никто не понял вопроса...
Почему в результате команды:
insert into SUBS_PAY
(PAY_SUMM, PAY_NDS)
values (654.65, 321.32)

Получаем в базе значения
PAY_SUMM=654.65
PAY_NDS=321.3199999999
????


 
Johnmen   (2002-10-16 11:15) [7]

>Sirus © (16.10.02 11:10)

По-моему, ты не понял ответа...:o))


 
Sirus   (2002-10-16 11:21) [8]

В общем если я правильно понял, то
на select SUM(FIELD) from TABLE не стоит надеятся...
Нужно вручную все суммировать и округлять...
Так???
Ну чтож... спасибо на этом... :))


 
Sergey13   (2002-10-16 11:26) [9]

2Johnmen © (16.10.02 11:06)
>Зато скорость работы с полями а-ля float максимально высока !
Типа приехали не туда, зато быстро. 8-)
>А клиент пусть сам думает, как это понимать. :-)
Клиент всегда прав. 8-) Если в поле есть значение 12,34 и я вычитаю 12,34, а затем запрашиваю все записи с НЕ НУЛЕВЫМ значением, то какого черта ИНОГДА (я подчеркиваю ИНОГДА) вылезает эта запись. Причем в значении этого поля гордо стоит 0, и понять причину этого появления можно только если запросить это поле умноженым на дофига. И лечится это только принудительным округлением до точности указанной в типе поля (например NUMERIC(15,2)). Другого способа я не придумал. Может подскажешь.

2Sirus © (16.10.02 11:10)
А по моему ты не понял ответов.


 
Johnmen   (2002-10-16 11:32) [10]

>Sergey13 © (16.10.02 11:26)
>...Причем в значении этого поля гордо стоит 0,...

Нет ! Там будет стоять не 0 ! Просто тебе показывается значение уже с округлением...

>...Другого способа я не придумал...

Я тоже.. :-)


 
Sergey13   (2002-10-16 11:48) [11]

2Johnmen © (16.10.02 11:32)
>Нет ! Там будет стоять не 0 ! Просто тебе показывается значение уже с округлением...
Так в том то и трабла, что показывает не то что есть. Да и черт с ним с показом. Плохо то что условие не работает из-за этого.

Предлагаю сойтись на компромисе - хранит хорошо, но не точно. 8-)


 
Sirus   (2002-10-16 11:51) [12]

Как я уже сказал в самом начале: тип поля NUMERIC(15,2)
Может есть другой способ....


 
Alexandr   (2002-10-16 11:57) [13]

1) Использовать 3 диалект
2) Или использовать первый диалект, но с Integer или DoublePrecision


 
Johnmen   (2002-10-16 12:01) [14]

>Sergey13 © (16.10.02 11:48)

Ок !
Кстати...Один из стандартных выходов - хранить в integer,
а в приложении интерпретировать с нужной точностью...


 
Sirus   (2002-10-16 12:04) [15]

> Johnmen © (16.10.02 12:01)
> Ок !
> Кстати...Один из стандартных выходов - хранить в integer,
> а в приложении интерпретировать с нужной точностью...

Вот именно... Так я и сделал... Надеюсь теперь такого не повторится.... :)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-11184
kull
2002-10-24 16:42
2002.11.04
Как убрать нулевые символы?


1-11146
opoloXAI
2002-10-24 13:05
2002.11.04
Сообщение об ошибке при показе MessageDlg.


3-11057
Roma111
2002-10-14 12:25
2002.11.04
Ошибка БД - Indexes


14-11474
Ketmar
2002-10-13 13:10
2002.11.04
заколебал WinWord своими глюками!


1-11242
Beglec
2002-10-23 02:30
2002.11.04
Интересный косяк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский