Главная страница
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.046 c
3-1169454228
Егоров А.Н.
2007-01-22 11:23
2007.04.15
Выражение CASE в операторе SELECT


4-1164360802
Виктор1
2006-11-24 12:33
2007.04.15
Определение фокуса чужого TEdit


15-1174164985
Shamansky
2007-03-17 23:56
2007.04.15
Delphi PHP


2-1174757676
Kolan
2007-03-24 20:34
2007.04.15
Взаимодействие объекта и его UI представления — как организовать?


1-1171616348
_Mouse_
2007-02-16 11:59
2007.04.15
Подключение библиотеки к Pascal Scripts