Текущий архив: 2003.01.16;
Скачать: CL | DM;
ВнизFloat поле в IB. 6,2 превращает в 6,19999980926514 Найти похожие ветки
← →
std79 (2002-12-19 11:42) [0]Здравствуйте!
есть поле P1 Float. При вводе значения, например 6.2 он выкидывает 6,19999980926514. как сделать, чтобы так и оставалось 6,2?
← →
Prooksius (2002-12-19 11:43) [1]Не использовать Float.
http://www.ibase.ru/devinfo/dontdoit.htm
← →
std79 (2002-12-19 11:49) [2]этот тип данных имеет длину 4 байта и точность всего 7 цифр. Эквивалентом в Delphi является single. Если хотите использовать вещественные числа, то сначала попробуйте перемножить и поделить два таких числа прямо в Delphi - так вы увидите точность вычислений, что исключит впоследствии проблемы с хранением и обработкой таких данных в базе.
---------------------------------------
А какой использовать?
← →
Delirium^.Tremens (2002-12-19 11:54) [3]Ну, есть в IB5.x такой тип: NUMERIC(15,2)
← →
std79 (2002-12-19 12:00) [4]Опечатался, не правильно указал версию IB - 6.0.1.0
Там тоже есь иль там есть что-нибудь еще?
← →
Prooksius (2002-12-19 12:01) [5]А самое лучшее, перейти на FireBird/Yaffil и юзать Int64.
http://www.ibase.ru/devinfo/ibp_60_exact_num_fs.html
← →
Prooksius (2002-12-19 12:03) [6]Совет: Читай www.ibase.ru весь.
← →
Johnmen (2002-12-19 12:05) [7]>std79
>...он выкидывает 6,19999980926514
Кто он ? И вообще, мы увидим вопрос по-существу ?
← →
std79 (2002-12-19 12:21) [8]Johnmen
Что значит по существу? ИМХО, в теме указано это и что! InterBase это делает (см. Тему)!
← →
Prooksius (2002-12-19 12:40) [9]Почитай еще это:
http://www.ibase.ru/devinfo/round.htm
← →
std79 (2002-12-19 12:55) [10]
поддержка int64 уже существует в BDE 5.x, однако в IB будет реализована только в версии 6.0
Так я могу использовать int64 в IB6?
← →
Prooksius (2002-12-19 12:56) [11]Ну попробуй сам. Получится - значит можешь.
← →
Johnmen (2002-12-19 13:24) [12]>std79 (19.12.02 12:21)
>Что значит по существу?
Значит с конкретным указанием в чем твоя проблема и как пытался сам ее решить.
>InterBase это делает
Не надо поспешных заявлений...
>При вводе значения, например 6.2 ...
Где вводится, как вводится, кем вводится, с помощью чего ?
>...он выкидывает 6,19999980926514.
Куда выкидывает ? На помойку ?
>...как сделать, чтобы так и оставалось 6,2?
Где оставалось и что ???
Короче... Задав вопрос по-существу, скорее получишь правильный ответ...:)))
← →
std79 (2002-12-19 13:28) [13]Спасибо всем!
Delirium^.Tremens дал конкретный ответ.
← →
Johnmen (2002-12-19 13:49) [14]>std79 (19.12.02 13:28)
>Delirium^.Tremens дал конкретный ответ.
Это БОЛЬШОЕ заблуждение !!!
А впрочем, Бог с тобой... Жизнь научит...:)
← →
std79 (2002-12-19 13:52) [15]Johnmen
Дык, так Вы конкретно ничего не сказали, хотя, имхо, вопрос вполне конкретный. А вот кричать что все балбесы, непонять чего спрашивают - это каждый может!
← →
Johnmen (2002-12-19 14:06) [16]Я не кричу, и тем более никого не обзывал. Я пытаюсь тебе помочь. Но ты сам этого, почему то, не хочешь...
И я действительно не понимаю, что ты КОНКРЕТНО хочешь.
← →
Prooksius (2002-12-19 14:14) [17]Да, мы тут все работем гадалками, телепатами.
ЛЮДИ!!!
Формулируйте вопрос точнее. Встаньте на место отвечающего и проверьте, понятно ли вас, все ли вы сообщили для понимания того, чего вы хотите.
← →
std79 (2002-12-19 14:17) [18]Johnmen.
Я хотел все-го лишь поле, ч которое можно внести цену 4,55 например. Вот и все. В данный момент я сделал поле NUMERIC(8,2)
Пока работает.
← →
Johnmen (2002-12-19 14:47) [19]>std79 (19.12.02 14:17)
>Я хотел все-го лишь поле, ч которое можно внести цену 4,55
Ну вот опять...:(
Внести 4,55 можно и в поле с пл.точкой и в int поле и в char и в varchar и в blob и....
Если ты думаешь, что NUMERIC(8,2) это 99999.99, то и это БОЛЬШОЕ заблуждение...
Рекомендация такая - смотри документацию по IB, раздел типы данных... Это - ОСНОВЫ !
← →
Matvey (2002-12-19 15:01) [20]FloatToStrF();
← →
Sergey13 (2002-12-20 09:19) [21]2Johnmen © (19.12.02 14:47)
Да всё ты понимаешь. Эта тема возникает здесь раз в неделю. Не может ИБ нормально хранить числа - не может!!! Ни в одной другой СУБД (из известных мне по крайней мере) нет такого.
>Если ты думаешь, что NUMERIC(8,2) это 99999.99, то и это БОЛЬШОЕ заблуждение...
Ну и в чем это заблуждение? Только не надо про перевод из двоичной в десятичную систему и т.п. Меня, как конечного пользователя СУБД, это абсолютно не колышет.
Из хелпа по 4.2 (я ее юзаю)
Name: NUMERIC (precision, scale) Size: variable
Range/Precision: precision = 1 to 15. Specifies exactly precision digits of precision to store. scale = 1 to 15. Specifies number of decimal places for storage. Must be less than or equal to precision.
Description: Number with a decimal point scale digits from the right. For example, NUMERIC(10,3) holds numbers accurately in the following format:
ppppppp.sss
Что по твоему значит NUMERIC(8,2)? Почему если КОНКРЕТНО указав количество знаков после запятой нужно постоянно думать об этом.
>Внести 4,55 можно и в поле ...
Да внести то можно, но вот оперировать с внесенным числом нужно осторожно. Ибо если, например, вычесть из этого числа 4,55 то получится ли 0 - это надо еще проверить. Или , допустим, запросив у базы записи where field=4.55 можно таковых и не получить.
2std79 (19.12.02 14:17)
ИМХО, реально побороть эту проблему можно только с помощью UDF (своей или скачаной - без разницы).
← →
Alexandr (2002-12-20 09:25) [22]ну что вы ругаетесь о рецептах приготовления Interbase...
Вы просто не умеете его готовить.
← →
Sergey13 (2002-12-20 09:33) [23]2Alexandr © (20.12.02 09:25)
>ну что вы ругаетесь о рецептах приготовления Interbase...
>Вы просто не умеете его готовить.
Потому, что , переходя на кулинарию, только по этой поваренной книге, чтобы сварить покупные пельмени, нужно знать секрет выращивания мяса и злаков.
← →
Alexandr (2002-12-20 09:42) [24]нет.
Достаточно прочитать инструкцию по проготовлению и иметь базовые знания: как включать печку, откуда брать воду, уметь разбираться в показаниях времени и уметь вычислять интервалы оного, соблюдать меры предосторожности как то: не играй с открытым огнем, не стой под стрелой (ой, меня не туда понесло...), в конце концов, не ешь сразу, а то обожгешся - надо студить.
По-моему ничего сложного, это все, что мы знаем с самого детства.
Но вот почему-то в случае с Interbase делаем совсем по-другому: сначала не думая пытаемся расхреначить пельмени молотком, потом видя, что получилось не то, пытамся снова их слепить, потом кидаем в воду и удивляемся полученной субстанции.
← →
Johnmen (2002-12-20 09:53) [25]>Sergey13 © (20.12.02 09:19)
Все, что "мельче" NUMERIC(9,2) есть INTEGER. Что и отражено в документации....
← →
Sergey13 (2002-12-20 09:58) [26]2Alexandr © (20.12.02 09:42)
Ну а если уйти от кулинарии и советов по ОБЖ. В чем дело по сабжу - может и правда я дурак, я ж не отказываюсь - объясни популярно - почему поле Numeric(8,2)в ИБ может содержать 3.33333333 - это же не вписывается в объявленый формат?
Я с ИБ занимаюсь достаточно редко - для калымов - поэтому и не очень ее знаю. Поэтому просьба - просвети.
← →
Sergey13 (2002-12-20 10:23) [27]2Johnmen © (20.12.02 09:53)
>Все, что "мельче" NUMERIC(9,2) есть INTEGER. Что и отражено в документации....
Это не совсем так. Для всего "что "мельче" NUMERIC(9,2)" формат внутреннего хранения есть INTEGER. Вот так примерно это звучит. Дык и кино в конечном итоге хранится как нолики-единицы. Но видеть то хочеца кино, а не их. Я и вел к тому что в ИБ есть проблемы с конвертацией между объявлеными тапами и внутренним представлением этих типов.
← →
Alexandr (2002-12-20 10:42) [28]Да есть определенные проблемы, особенно в старых версиях IB, дольшей частью нивелированные в Firebird 1.0+dialect3.
← →
Alexandr (2002-12-20 10:43) [29]А вообще, я признаю только натуральные типы данных
Interger и double Precision.
Остальное от лукавого.
Страницы: 1 вся ветка
Текущий архив: 2003.01.16;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.009 c