![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Лисоводы всех стран, объединяйтесь !!! |
Правила округления | |||
---|---|---|---|
Владимир Максимов Автор Сообщений: 13874 Откуда: Москва |
Устанавливаю соединение VFP+MS SQL (пробовал на разных версиях - результат одинаковый)
SET DECIMALS TO 4 aa=18.6450 SQLEXEC(np_connection, 'select ROUND(?aa,2) as sum1','test') ?'param ',m.aa,' result ',test.sum1 aa=18.6451 SQLEXEC(np_connection, 'select ROUND(?aa,2) as sum1','test') ?'param ',m.aa,' result ',test.sum1 aa=18.6450 SQLEXEC(np_connection, 'select ROUND('+TRANSFORM(m.aa)+',2) as sum1','test') ?'value ',m.aa,' result ',test.sum1 Результат param 18,6450 result 18,64 param 18,6451 result 18,65 value 18,6450 result 18,65 Чем объясняется использование разных правил округления при передаче значения как параметр и при явном задании значения? Проверял на VFP6, VFP9, MS SQL 6.5, MS SQL2000 ------------------ ![]() |
||
Re: Правила округления | |||
---|---|---|---|
Перминов Игорь Сообщений: 1582 Откуда: Красная Орловка |
Но что самое интересное выполнение в QA:
select round(18.6450,2),round(18.6451,2) 18.6500 ------------------ Без коментариев.. ![]() |
||
Re: Правила округления | |||
---|---|---|---|
Перминов Игорь Сообщений: 1582 Откуда: Красная Орловка |
Похоже, что самый правильный результат дает:
aa=18.6450 SQLEXEC(np_connection, 'select ROUND('+TRANSFORM(m.aa)+',2) as sum1','test') ------------------ Без коментариев.. ![]() |
||
Придумал выход | |||
---|---|---|---|
Пашок Сообщений: 706 |
|
||
Re: Придумал выход | |||
---|---|---|---|
Владимир Максимов Автор Сообщений: 13874 Откуда: Москва |
Если ты об этом
forum.foxclub.ru То это просто способ обойти проблему, когда хочется именно передавать данные как параметр. Непонятна причина данного глюка. ------------------ ![]() |
||
Ну конечно хочется нормально | |||
---|---|---|---|
Пашок Сообщений: 706 |
передавать, а что мы можем сделать?
------------------ ![]() |
||
Re: Ну конечно хочется нормально | |||
---|---|---|---|
Igor Korolyov Сообщений: 34066 |
Привлечь внимание специалистов из MS, чтобы они посмотрели что там да как
происходит при передаче параметров от фокса к ODBC и от ODBC к серверу... Возможно где-то там и закралась ошибка. ------------------ WBR, Igor ![]() |
||
Re: Ну конечно хочется нормально | |||
---|---|---|---|
Aleksey Tsingauz [MSFT] |
Здравствуйте, Игорь!
Цитата: На сервере с float работает так же. select ROUND(CAST(18.6450 as float),2) select ROUND(CAST(18.64500000001 as float),2) select ROUND(CAST(18.6450 as Numeric(10,5)),2) Результат: ----------------------------------------------------- 18.640000000000001 (1 row(s) affected) ----------------------------------------------------- 18.649999999999999 (1 row(s) affected) ------------ 18.65000 (1 row(s) affected) Видимо это связано с неточностью представления float чисел. Aleksey Tsingauz Visual FoxPro Dev Team ![]() |
||
Re: Ну конечно хочется нормально | |||
---|---|---|---|
Igor Korolyov Сообщений: 34066 |
А сделать чтоб через ODBC шло не Float никак не получится? Т.е. все
numeric-и будут конвертится во float? ------------------ WBR, Igor ![]() |
||
© 2000-2021 Fox Club  |