Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.027 c
14-49214
Marser
2002-12-27 23:42
2003.01.16
В жизни любого человека


14-49295
TTCustomDelphiMaster
2002-12-27 17:25
2003.01.16
Париж де нотердам


1-48996
Scorp
2003-01-07 00:45
2003.01.16
програмное выполнение команды


3-48958
lefan
2002-12-23 11:40
2003.01.16
Проблема с Query....


1-49073
Оля
2003-01-08 12:00
2003.01.16
MDIForm 8...(