Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибочный результат ХП [IB6.x]


Juice ©   (2007-01-10 21:27:00) 

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


Juice   (2007-01-29 11:29:00) [1]

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


Johnmen   (2007-01-26 22:05:00) [2]

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


Juice   (2007-01-26 19:29:00) [3]

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


Juice   (2007-01-26 19:09:00) [4]

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


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 18:40:00) [5]

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


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

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


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


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

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


ЮЮ   (2007-01-18 09:56:00) [8]

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


Juice   (2007-01-18 09:54:00) [9]

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


Juice   (2007-01-18 09:51:00) [10]

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


try   (2007-01-10 22:16:00) [11]


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


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


Anatoly Podgoretsky   (2007-01-10 21:52:00) [12]

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

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


try   (2007-01-10 21:49:00) [13]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо