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

Вниз

Вопрос по полю типа Float в InterBase6.x   Найти похожие ветки 

 
Z_man7777 ©   (2003-06-02 06:25) [0]

Приветствую всех Мастеров!!!
У меня вопросик (смотрите тему).
Как сделать так, чтобы при сохранении данных в базу, а именно в это поле числа с плавающей запятой, например - 143.45, это число не сохранялось в виде, например - 143.446999923641.
Ниже приведен SQL-текс при создании таблицы.
CREATE TABLE CURRENCY (
ID INTEGER NOT NULL PRIMARY KEY,
NAME VARCHAR(50),
COURSE FLOAT
);

Чем можете помогите!
Заранее спасибо!!!


 
Alexandr ©   (2003-06-02 07:06) [1]

забудь про Float у него точность маленькая.
Юзай Double Precision и волосы будут мягкими и шелковистыми


 
Zacho ©   (2003-06-02 07:08) [2]

С плавающей запятой - никак. Читай о представлении чисел с плавающей запятой. Если нужно с фиксированной запятой - то NUMERIC(precesion,scale) или DECIMAL(precesion,scale) где precesion - общее кол-во цифр в числе, scale - кол-во цифр после запятой. В диалекте 3 при этом никаких погрешностей не будет.
Вообще, читай Data Definition Guide, Chapter 4 "Specifying Datatypes" - Defining numeric datatypes и http://www.ibase.ru/develop.htm раздел "Типы данных"


 
Z_man7777 ©   (2003-06-02 07:43) [3]

!Zacho!
А как быть с тем, что я не знаю сколько знаков до запятой?


 
Anatoly Podgoretsky ©   (2003-06-02 07:54) [4]

А тогда и не волнуйся, поставит столько сколько нужно для максимальной точности числа, оно же с плавающей запятой!


 
Zacho ©   (2003-06-02 07:54) [5]


> Z_man7777 © (02.06.03 07:43)

Используй максимально возможное. В диалекте 3 максимально возможное precision - 18, в диалекте 1 -15. Например:
CREATE DOMAIN D_MONEY AS NUMERIC(18,2) NOT NULL


 
Sergey13 ©   (2003-06-02 09:19) [6]

2Zacho © (02.06.03 07:54)
>Используй максимально возможное.
Один хрен не спасет. Единственный выход - округлять везде, где возможно через UDF.


 
Zacho ©   (2003-06-02 09:29) [7]


> Sergey13 © (02.06.03 09:19)

С чего бы это ? Не надо путать типы данных с плавающей запятой и с фиксированной запятой !
В диалекте 3 NUMERIC и DECIMAL хранятся как smallint, integer или int64 в зависимости от precision и scale. Ничего округлять не надо ! Читайте Data Definition Guide - там все подробно расписано.


 
Sergey13 ©   (2003-06-02 09:45) [8]

2Zacho © (02.06.03 09:29)
>С чего бы это ?
"И опыт - сын ошибок трудных" (с) А.С.Пушкин

> Не надо путать типы данных с плавающей запятой и с фиксированной запятой !
В чем отличие? К какому типу ты относишь например свой домен из примера?

>Читайте Data Definition Guide - там все подробно расписано.
Ты не поверишь - читал!!!



 
Zacho ©   (2003-06-02 10:03) [9]


> Sergey13 © (02.06.03 09:45)
> "И опыт - сын ошибок трудных" (с) А.С.Пушкин

А опыт, случаем, не относится к диалекту 1 ? Там да, NUMERIC(15,2) - реально double precision со всем из этого вытекающим.

> В чем отличие? К какому типу ты относишь например свой домен
> из примера?

Отличие в том, что в числе с плавающей запятой может быть произвольное кол-во знаков после запятой, а с фиксированной - строго определенное.
NUMERIC и DECIMAL - типы данных с фиксированной запятой, FLOAT и DOUBLE PRECISION - с плавающей. А реально NUMERIC(18,2) будет INT64 (оно же BIGINT).

> Ты не поверишь - читал!!!

Да верю, верю :-) Попробуй перечитать еще раз, внимательней, там действительно все очень подробно.


 
Sergey13 ©   (2003-06-02 10:16) [10]

2Zacho © (02.06.03 10:03)
>А опыт, случаем, не относится к диалекту 1 ?
Иес. А ты хочешь сказать что в 3 диалекте это лечится? Попробую на досуге, но верится с трудом.


 
Zacho ©   (2003-06-02 10:25) [11]


> Sergey13 © (02.06.03 10:16)

В том и дело, что в диалекте 3 NUMERIC и DECIMAL хранятся как целочисленные типы (smallint, integer или int64) и при занесении числа в такое поле просто происходит умножение на 10^scale, при извлечении - наоборот, деление. В результате никаких погрешностей округления и потерь точности не возникает.



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

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-84110
mao
2003-06-10 17:06
2003.06.26
Помогите свернуть форму


6-84503
Zheka
2003-04-24 10:10
2003.06.26
GetHostByName


1-84089
sapsi
2003-06-10 12:36
2003.06.26
Изменение вида курсора


9-83833
Argonaut
2003-01-13 17:56
2003.06.26
Управление мышью


11-84050
ZZ
2002-06-27 19:04
2003.06.26
KOL и Unicode