![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование типов данных 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 !
(погрешность разрядной сетки, однако...)