![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Float поле в IB. 6,2 превращает в 6,19999980926514 [D6, IB5.x]
std79 © (2002-12-19 11:42:00)Здравствуйте!
есть поле P1 Float. При вводе значения, например 6.2 он выкидывает 6,19999980926514. как сделать, чтобы так и оставалось 6,2?
Alexandr (2002-12-20 10:43:00) [1]А вообще, я признаю только натуральные типы данных
Interger и double Precision.
Остальное от лукавого.
Alexandr (2002-12-20 10:42:00) [2]Да есть определенные проблемы, особенно в старых версиях IB, дольшей частью нивелированные в Firebird 1.0+dialect3.
Sergey13 (2002-12-20 10:23:00) [3]2Johnmen © (20.12.02 09:53)
>Все, что "мельче" NUMERIC(9,2) есть INTEGER. Что и отражено в документации....
Это не совсем так. Для всего "что "мельче" NUMERIC(9,2)" формат внутреннего храненияесть INTEGER. Вот так примерно это звучит. Дык и кино в конечном итоге хранится как нолики-единицы. Но видеть то хочеца кино, а не их. Я и вел к тому что в ИБ есть проблемы с конвертацией между объявлеными тапами и внутренним представлением этих типов.
Sergey13 (2002-12-20 09:58:00) [4]2Alexandr © (20.12.02 09:42)
Ну а если уйти от кулинарии и советов по ОБЖ. В чем дело по сабжу - может и правда я дурак, я ж не отказываюсь - объясни популярно - почему поле Numeric(8,2)в ИБ может содержать 3.33333333 - это же не вписывается в объявленый формат?
Я с ИБ занимаюсь достаточно редко - для калымов - поэтому и не очень ее знаю. Поэтому просьба - просвети.
Johnmen (2002-12-20 09:53:00) [5]>Sergey13 © (20.12.02 09:19)
Все, что "мельче" NUMERIC(9,2) есть INTEGER. Что и отражено в документации....
Alexandr (2002-12-20 09:42:00) [6]нет.
Достаточно прочитать инструкцию по проготовлению и иметь базовые знания: как включать печку, откуда брать воду, уметь разбираться в показаниях времени и уметь вычислять интервалы оного, соблюдать меры предосторожности как то: не играй с открытым огнем, не стой под стрелой (ой, меня не туда понесло...), в конце концов, не ешь сразу, а то обожгешся - надо студить.
По-моему ничего сложного, это все, что мы знаем с самого детства.
Но вот почему-то в случае с Interbase делаем совсем по-другому: сначала не думая пытаемся расхреначить пельмени молотком, потом видя, что получилось не то, пытамся снова их слепить, потом кидаем в воду и удивляемся полученной субстанции.
Sergey13 (2002-12-20 09:33:00) [7]2Alexandr © (20.12.02 09:25)
>ну что вы ругаетесь о рецептах приготовления Interbase...
>Вы просто не умеете его готовить.
Потому, что , переходя на кулинарию, только по этой поваренной книге, чтобы сварить покупные пельмени, нужно знать секрет выращивания мяса и злаков.
Alexandr (2002-12-20 09:25:00) [8]ну что вы ругаетесь о рецептах приготовления Interbase...
Вы просто не умеете его готовить.
Sergey13 (2002-12-20 09:19:00) [9]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 (своей или скачаной - без разницы).
Matvey (2002-12-19 15:01:00) [10]FloatToStrF();
Johnmen (2002-12-19 14:47:00) [11]>std79 (19.12.02 14:17)
>Я хотел все-го лишь поле, ч которое можно внести цену 4,55
Ну вот опять...:(
Внести 4,55 можно и в поле с пл.точкой и в int поле и в char и в varchar и в blob и....
Если ты думаешь, что NUMERIC(8,2) это 99999.99, то и это БОЛЬШОЕ заблуждение...
Рекомендация такая - смотри документацию по IB, раздел типы данных... Это - ОСНОВЫ !
std79 (2002-12-19 14:17:00) [12]Johnmen.
Я хотел все-го лишь поле, ч которое можно внести цену 4,55 например. Вот и все. В данный момент я сделал поле NUMERIC(8,2)
Пока работает.
Prooksius (2002-12-19 14:14:00) [13]Да, мы тут все работем гадалками, телепатами.
ЛЮДИ!!!
Формулируйте вопрос точнее. Встаньте на место отвечающего и проверьте, понятно ли вас, все ли вы сообщили для понимания того, чего вы хотите.
Johnmen (2002-12-19 14:06:00) [14]Я не кричу, и тем более никого не обзывал. Я пытаюсь тебе помочь. Но ты сам этого, почему то, не хочешь...
И я действительно не понимаю, что ты КОНКРЕТНО хочешь.
std79 (2002-12-19 13:52:00) [15]Johnmen
Дык, так Вы конкретно ничего не сказали, хотя, имхо, вопрос вполне конкретный. А вот кричать что все балбесы, непонять чего спрашивают - это каждый может!
Johnmen (2002-12-19 13:49:00) [16]>std79 (19.12.02 13:28)
>Delirium^.Tremens дал конкретный ответ.
Это БОЛЬШОЕ заблуждение !!!
А впрочем, Бог с тобой... Жизнь научит...:)
std79 (2002-12-19 13:28:00) [17]Спасибо всем!
Delirium^.Tremens дал конкретный ответ.
Johnmen (2002-12-19 13:24:00) [18]>std79 (19.12.02 12:21)
>Что значит по существу?
Значит с конкретным указанием в чем твоя проблема и как пытался сам ее решить.
>InterBase это делает
Не надо поспешных заявлений...
>При вводе значения, например 6.2 ...
Где вводится, как вводится, кем вводится, с помощью чего ?
>...он выкидывает 6,19999980926514.
Куда выкидывает ? На помойку ?
>...как сделать, чтобы так и оставалось 6,2?
Где оставалось и что ???
Короче... Задав вопрос по-существу, скорее получишь правильный ответ...:)))
Prooksius (2002-12-19 12:56:00) [19]Ну попробуй сам. Получится - значит можешь.
std79 (2002-12-19 12:55:00) [20]
поддержка int64 уже существует в BDE 5.x, однако в IB будет реализована только в версии 6.0
Так я могу использовать int64 в IB6?