Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Openrowset - проблема с закачкой вещественного числа  [new]
JAndrew
Member

Откуда:
Сообщений: 6
Добрый день!
У меня возникла слежующая проблема - я использую openrowset для закачки следующего вида:
openrowset('MSDASQL','Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox7.X;DefaultDir=D:\\temp_Dir;
Dbq=D:\\\\temp_dir\\; CollatingSequence=ASCII;','select Поля from Таблица'), имеется поле DOZA в db таблице, имеющее тип Numеric и значение 18.9, а в таблице SQL Server - Numeric(39, 19). После закачки данных поле имеет значение 18.899999999999999, а не 18.9.
10 апр 12, 11:12    [12391987]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
JAndrew
Member

Откуда:
Сообщений: 6
Зря я грешил на openrowset - проблема не в нем, а в преобразовании типов в SQL Server. Я наивно полагал, что если
declare @t float set @t = 18.9
то результат select cast(@t as numeric(38,19)) будет 18.9, а оказалось 18.899999999999999.
Вопрос еще не решен
10 апр 12, 12:58    [12392840]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
JAndrew
Вопрос еще не решен
Тогда прочитайте, как устроены неточные типы, к которым относится float.
10 апр 12, 13:00    [12392858]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAndrew
Вопрос еще не решен

Какой вопрос то ?
declare @t float set @t = 18.9 - это уже число с плавающей точкой
А вы почему то хотите, чтобы сервер воспринимал его как число с фиксированным числом знаков после запятой
10 апр 12, 13:00    [12392865]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
уТКа
Member

Откуда: Страна дураков и разбитых дорог
Сообщений: 1266
JAndrew,

declare @t money;
set @t = 18.9;
select @t;

18,90

все четко
10 апр 12, 14:25    [12393625]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
JAndrew
Member

Откуда:
Сообщений: 6
Преобразование float в целочисленные типы будет не верна, а хранятся данные для закачки в db-таблице типа Numeric (вещественный тип для Paradox), при загрузке в Numeric(38, 19) идет обрезка вещественной части и вместо 18.9 , видим 18.899999999999999.
Что думаете над:
declare @t float set @t = 18.9
select cast(cast (@t as varchar(38)) as numeric(38,19)) ?
10 апр 12, 15:58    [12394460]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAndrew
Преобразование float в целочисленные типы будет не верна, а хранятся данные для закачки в db-таблице типа Numeric (вещественный тип для Paradox), при загрузке в Numeric(38, 19) идет обрезка вещественной части и вместо 18.9 , видим 18.899999999999999.

А где тут "обрезка" ?
Вы по каким правилам округляете до двух знаков после запятой ?
И почему считаете, что результат должен быть 18.9, если это "вещественный тип для Paradox" ?
10 апр 12, 16:02    [12394490]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
JAndrew
Member

Откуда:
Сообщений: 6
В db-таблице хранится 18.9 в поле Numeric - вещественное число (после запятой хранит 15 знаков), хотелось бы видеть такое же число и на SQL Server, не смотря на заморочки с типами(так как сохранялось 18.9 в сторонней программе, после чего это значение пошло в db таблицу) . Округления нет в принципе.
10 апр 12, 16:49    [12394928]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAndrew
В db-таблице хранится 18.9 в поле Numeric - вещественное число (после запятой хранит 15 знаков), хотелось бы видеть такое же число и на SQL Server

Расскажите, а как в 18.9 можно хранить 15 знаков после запятой ?
10 апр 12, 16:53    [12394955]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
JAndrew
Member

Откуда:
Сообщений: 6
Это я в принципе про то, что в Paradox тип Numeric хранит 15 десятичных разрядов. Но это неважно - проблема в том, хотелось бы корректно преобразовать float в numeric(38, 19). Как вы считаете, подойдет ли вышеизложенный способ?
10 апр 12, 16:58    [12395009]     Ответить | Цитировать Сообщить модератору
 Re: Openrowset - проблема с закачкой вещественного числа  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAndrew
Это я в принципе про то, что в Paradox тип Numeric хранит 15 десятичных разрядов

И как же он это делает вопреки заданному формату ?

JAndrew
о это неважно - проблема в том, хотелось бы корректно преобразовать float в numeric(38, 19)

Определите правила корректности и преобразуйте согласно им.
10 апр 12, 17:00    [12395023]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить