Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование типов данных MSSQL [D5, MSSQL]


Sergey-ZZZ ©   (2002-10-10 12:21:00) 

У меня в поле типа DESIMAL (9,5) лежит число 0,01. Когда я обращаюсь к этому полю и извлекаю данные
T:=ADOQuery1.Fields[0].Value;
то Т принимает значение 0,009999999767765. Т я объявил как Sengle. Пробовал я извратиться T:=ADOQuery1.Fields[0].AsFloat - тот же результат. Помогите получить тоже число которое лежит в поле. Заранее всем благодарен.


Sergey-ZZZ   (2002-10-11 09:25:00) [1]

Я решил свою проблему тупым умножением всех данных перед сохранением на 1000(т.к. посмотрел что больше трех знаков после запятой у меня не бывает), и храню на сервере как Integer. По извлечению - делю на 1000. Тупо, но работает. На счет 3-х метров думаю тоже ошибка с запятой. ;-)
Всем привет.


Johnmen   (2002-10-10 16:31:00) [2]

>sniknik © (10.10.02 16:14)
>...самолеты летают, а крыльями не машут...

Как это не машут ?! Еще как машут ! :))))
Уже где-то когда-то пояснял, что изгибные колебания крыла самолета (класса ТУ104) достигают 3 м. на конце относительно фюзеляжа...
Сам не проверял :))), но так меня учили когда-то не помню в каком курсе....


sniknik   (2002-10-10 16:14:00) [3]

спасибо. суть ясна.

но я уже 5 лет в авиационном институте а до сих пок понять не могу, вот самолеты летают, а крыльями не машут, почему? :-))))

с dbf таких проблем нет (скорее всего) там же число представляется строкой. а вот с моим переносом.... , там были небольшие вычисления (целочисленные + 1,- 1, дробь не меняют) ну и деление гдето было но его потом убрал, а тип real остался и как теперь понятно совершенно зря. надо было вычисления в селекте делать а перенос AsString и не было бы проблем.


Johnmen   (2002-10-10 15:41:00) [4]

Меня удивляет, что с хранением в dbf тоже есть такие явления ...:)
Видимо, в более позних версиях была изменена сущность хранения float"а в dbf ... Не знаю ...
А если говорить в целом, то, как мы все знаем, любое число можно представить в двоичной сист.счисления. Так вот, попытайся разложить, например, 13.171 и увидишь, что разрядной сетки может не хватить для точного разложения...

Может коряво изложил, но суть, думаю, ясна...:)


sniknik   (2002-10-10 15:20:00) [5]

Johnmen ©
подробнее pls.
у меня примерно то же было dbf в dbf переносил, причем не всегда а время от времени. решил раундом до определенного разряда (сдесь 5). вообще бред в dbf определяеш поле 16,2 а после видиш там число выходяшее за все пределы (10 знаков после запятой).
уже поздновато но все одно интересно в чем дело.


Johnmen   (2002-10-10 12:26:00) [6]

0,01=0,009999999767765 !
(погрешность разрядной сетки, однако...)


Наверх

Титульная страница Поиск, карта сайта Написать письмо