Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по полю типа 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.026 c
6-84477
Em(022000)
2003-04-21 04:14
2003.06.26
Как установить соединение с провайдером?


8-84441
~Mr.L@g~
2003-03-07 13:24
2003.06.26
TBASS и эквалайзер


14-84610
Igor
2003-06-09 13:02
2003.06.26
Длинные строки (>=1Gb)


3-83955
Конюхов Сергей
2003-06-04 14:35
2003.06.26
Изменения с одной машині не видні на второй


4-84830
Anonimus
2003-04-24 12:22
2003.06.26
Обработка событий от мыши..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский