Форум: "Базы";
Текущий архив: 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.04 c