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

Вниз

Ошибочный результат ХП   Найти похожие ветки 

 
Juice ©   (2007-01-10 21:27) [0]

CREATE PROCEDURE GETACTSUBJECTS
RETURNS (
   PRICEFOR1 NUMERIC(15,5)
AS
begin
    ...
    pricefor1=509040.0000/28000.0000;
    suspend;
end^


в результате возвращается 18,17999 :)

Как такое может быть !? Прошелся отладчиком - резултат 18.18, просто запуская получаем такую ерунду.

Диалект1, FB 1.03


 
try ©   (2007-01-10 21:49) [1]

Странно, калькулятор тоже показывает 18.18, что равно 18.17(9)
:)))))


 
Anatoly Podgoretsky ©   (2007-01-10 21:52) [2]

> try  (10.01.2007 21:49:01)  [1]

Чего странного, у калькулятора числа с фиксированой запятой, а у автора с плавающей.


 
try ©   (2007-01-10 22:16) [3]


> Anatoly Podgoretsky ©   (10.01.07 21:52) [2]
> Чего странного


Что показывает, как отладчик. Там, в посте [1], ещё смайл стоит.


 
Juice ©   (2007-01-18 09:51) [4]

Обьясните тупому, почему оно таки так и что сделать чтобы был правильный результат?


 
Juice ©   (2007-01-18 09:54) [5]

Ведь делится нацело, без периода, почему такое получается?


 
ЮЮ ©   (2007-01-18 09:56) [6]

1) использовать более "точные" типы для вщественных чисел, нежли NUMERIC(15,5).
Результаты для Double и Single в Delphi тоже часто "различаются".  
2) использовать в операциях переменные, а не константы, тип которых определен неявно


 
Juice ©   (2007-01-18 10:22) [7]


> ЮЮ ©   (18.01.07 09:56) [6]

2) у меня NUMERIC(15,5)/NUMERIC(15,5)
1) а что точнее ?


 
Johnmen   (2007-01-18 13:46) [8]

Точнее нет.
Читать тут http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
Juice ©   (2007-01-26 18:40) [9]

Я не успокоился. Numeric3 := numeric1/numeric2, везде точные типы, откуда фигня всплывает ? По всем законам логики numeric3 должна быть приведена к пятому знаку, даже если бы вместо numeric1 и numeric2 были бы числа с плавающей точкой. Ведь в шестом разряде 509040.0000/28000.0000 = 18,17999 однозначно тоже девятка стоит. В Delphi с currency обстоит так да и везде должно быть так.


 
Juice ©   (2007-01-26 19:09) [10]

Вот хороший пример :


SET TERM ^ ;

CREATE PROCEDURE TEST
RETURNS (
   RESULT5 NUMERIC(15,5),
   RESULT4 NUMERIC(15,4))
AS
DECLARE VARIABLE X NUMERIC(15,5);
DECLARE VARIABLE Y NUMERIC(15,5);
begin
 x = 509040;
 y = 28000;
 result4 = x/y;
 result5 = x/y;
 suspend;
end^

SET TERM ; ^


Возвращает Result5=18,17999, Result4 = 18,18
Почему число с точностью 4 приводится а с пять нет ?????????????!!!!!!!!! Для меня это большая проблема,


 
Juice ©   (2007-01-26 19:29) [11]

Попробуйте изменять RESULT4 от NUMERIC(15,2)) и вверх - (15,3),(15,4),(15,6), (15,7), (15,8) ... Неверный результат выдает только на (15,5) !!! А не бага ли это ? :)


 
Johnmen ©   (2007-01-26 22:05) [12]

Рекомендую почитать документацию на предмет спецификации типов, их применимости и особенностей.


 
Juice ©   (2007-01-29 11:29) [13]

Прочитал DataDef, LangRef, Releasenotes Firebird"a - ничего такого там нет. Какую документацию конкретно мне следует почитать ?



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

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

Наверх





Память: 0.47 MB
Время: 0.062 c
3-1170058556
abhtr
2007-01-29 11:15
2007.04.15
Как в запросе выявить новые записи


2-1174898079
Нуб
2007-03-26 12:34
2007.04.15
OPEN CUR_OBJS FOR vSQL USING nOBJ_TYPE, nOBJ_TYPE;


15-1174447946
Slider007
2007-03-21 06:32
2007.04.15
С днем рождения ! 21 марта


3-1169787958
Шмфтнср
2007-01-26 08:05
2007.04.15
сортировка в SQL по нескольким параметрам, поможите


15-1174460339
Romas81
2007-03-21 09:58
2007.04.15
Поменял 17-ку CRT на 17-ку TFT





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский