![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Данные типа FLOAT [D6, IB6.x, FireBird]
galexis © (2003-12-01 10:35:00)
Естьв базе данных поле типа FLOAT. Заношу туда данные, например 800.2 - а сохраняется 800,200012207031. Что это значит? Можно ли изменить формат ввода с . на , ?
Спасибо
sniknik (2003-12-01 13:00:00) [1]
galexis © (01.12.03 12:48) [15]
сначала, вне циклов(а) запрос, в цикле заполнение, после заполнения ExecSQL.
Vemer (2003-12-01 12:53:00) [2]
Для правильного хранения значений, особенно денежных в IBase лучше использовать поля типа Numeric[10,2]. Вижу 2 перимущества: 1 - не возникает никаких дробных хвостов, 2 - при занесений более длинных дробей все само правильно округляется без надобности использования кривого Round или написания собственного округления.
galexis (2003-12-01 12:48:00) [3]
>sniknik Что то я не разобрался с параметрами. Сначала запрос, потом заполнение параметров, потом open? Так?
sniknik (2003-12-01 11:52:00) [4]
> NUMPOST1, SUMMASH1 - это переменные, одна Integer, другая Double.
и прямо в текст вставляются? сомнительно
никакиж проблем, + если много заносится гораздо быстрее
INSERT INTO CONTROL (NUMPOST,SUMMASH) values (:p1, p2)
parameters[0].value:= NUMPOST1;
parameters[1].value:= SUMMASH1;
galexis (2003-12-01 11:36:00) [5]
>Anatoly Podgoretsky Заношу данные так:
INSERT INTO CONTROL (NUMPOST,SUMMASH) values ("+
NUMPOST1+","+
SUMMASH1+")";
NUMPOST1, SUMMASH1 - это переменные, одна Integer, другая Double.
Anatoly Podgoretsky (2003-12-01 11:36:00) [6]
Даже для Extended это число 800,200000000000046, что означае, что данное число не возможно представить точно.
Anatoly Podgoretsky (2003-12-01 11:31:00) [7]
Ты ни разу не расшифровал это "Заношу туда данные"
ZrenBy (2003-12-01 11:30:00) [8]
800.2 или 800,2 или 800@2 = 8002E-1
Reindeer Moss Eater (2003-12-01 11:28:00) [9]
Через параметры обойти. И навсегда забыть при этом про запятые и точки.
galexis (2003-12-01 11:27:00) [10]
> sniknik
проверял в региональных настройках систем.
Но дело в другом. Я же SQL запрос использую. А в нем запятая означает разделитель полей. Как это обойти?
Reindeer Moss Eater (2003-12-01 11:09:00) [11]
Дабл прецижн это и есть плавающая запятая. Так же как и Single.
BlackKing (2003-12-01 11:07:00) [12]
Ja postojanno ispol"zuju Double Precision i ni razu ne vozniklo problem, a po nachalu pitalsja ispol"zovat" Float, s nim nichego horoshego ne vishlo.
sniknik (2003-12-01 11:02:00) [13]
galexis © (01.12.03 10:43) [3]
>BlackKing Да, действительно. DOUBLE PRECISION помогло. Спасибо
не помогло(вернее это помогло в данном случае) просто у DOUBLE PRECISION ближайшее возможное число немного другое. к примеру 800,20000000000012207031 (часть с "лишними" цифрами обрезает) вот и все.
но и DOUBLE возможны "экссесы".
> ввожу 800.2 (иначе ошибка), а отображатся 800,2
на ввод можно поставить любой разделитель (также как и на вывод), например 800@2 и 800#2.
galexis ©
> Проверил.
где? в дельфях?
galexis (2003-12-01 10:59:00) [14]
Проверил. И на сервере разделитель целой и дробной части "," и на пользовательской машине ",". Чего же делать? Получается, что если открыть запись на изменение, нужно все запятые на точки исправлять. Как то не хорошо.
galexis (2003-12-01 10:43:00) [15]
>BlackKing Да, действительно. DOUBLE PRECISION помогло. Спасибо
>Anatoly Podgoretsky Региональными настройками на сервере где FireBird или на пользовательской машине. Потому что ввожу 800.2 (иначе ошибка), а отображатся 800,2
Anatoly Podgoretsky (2003-12-01 10:39:00) [16]
Это числа с плавающей запятой, их представить точно нельзя, представление будет до ближайшего числа, которое можно.
Формат ввода определяется региональными настройками.
BlackKing (2003-12-01 10:37:00) [17]
ne ispol"zuj FLOAT, ispol"zuj DOUBLE PRECISION