Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.068 c
1-1171620919
Kolan
2007-02-16 13:15
2007.04.15
Программа + пакет = AV при инициализации. Наоборот все Ок...


2-1174908858
lobach
2007-03-26 15:34
2007.04.15
Как прочитать строку???


9-1146880328
Сценарист
2006-05-06 05:52
2007.04.15
Что случилось с CVS ?


15-1174246656
Другой
2007-03-18 22:37
2007.04.15
Эх, законы :)


2-1174633027
Ega23
2007-03-23 09:57
2007.04.15
Наследование фреймов