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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.008 c
3-48876
Подскажите
2002-12-19 15:51
2003.01.16
Нужно составить запрос


7-49321
Tuman
2002-11-04 03:59
2003.01.16
как работать с PC Speaker`om?


14-49269
LordOfSilence
2002-12-27 10:34
2003.01.16
Закачать программку в кладовку


14-49309
race1
2002-12-26 06:14
2003.01.16
font


1-49090
ScableR
2003-01-03 02:56
2003.01.16
Помогите разобраться в вопросе с Delphi & MySQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский