for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Правила округления
Владимир Максимов
Автор

Сообщений: 13874
Откуда: Москва
Дата: 20.08.04 16:53:53
Устанавливаю соединение 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




------------------
Ratings: 0 negative/0 positive

Re: Правила округления
Перминов Игорь

Сообщений: 1582
Откуда: Красная Орловка
Дата: 23.08.04 05:49:28
Но что самое интересное выполнение в QA:
  
  select round(18.6450,2),round(18.6451,2)
Дает результат:
  
  18.6500




------------------
Без коментариев..
Ratings: 0 negative/0 positive

Re: Правила округления
Перминов Игорь

Сообщений: 1582
Откуда: Красная Орловка
Дата: 23.08.04 06:06:27
Похоже, что самый правильный результат дает:
  
  aa=18.6450      
    SQLEXEC(np_connection, 'select ROUND('+TRANSFORM(m.aa)+',2) as sum1','test')




------------------
Без коментариев..
Ratings: 0 negative/0 positive

Придумал выход
Пашок

Сообщений: 706
Дата: 23.08.04 11:55:53
forum.foxclub.ru




------------------
Ratings: 0 negative/0 positive

Re: Придумал выход
Владимир Максимов
Автор

Сообщений: 13874
Откуда: Москва
Дата: 23.08.04 13:11:41
Если ты об этом

forum.foxclub.ru

То это просто способ обойти проблему, когда хочется именно передавать данные как параметр. Непонятна причина данного глюка.




------------------
Ratings: 0 negative/0 positive

Ну конечно хочется нормально
Пашок

Сообщений: 706
Дата: 23.08.04 16:05:18
передавать, а что мы можем сделать?




------------------
Ratings: 0 negative/0 positive

Re: Ну конечно хочется нормально
Igor Korolyov

Сообщений: 34066
Дата: 24.08.04 20:50:57
Привлечь внимание специалистов из MS, чтобы они посмотрели что там да как
происходит при передаче параметров от фокса к ODBC и от ODBC к серверу...
Возможно где-то там и закралась ошибка.




------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Ну конечно хочется нормально
Aleksey Tsingauz [MSFT]
Дата: 26.08.04 23:32:12
Здравствуйте, Игорь!

Цитата:
Привлечь внимание специалистов из MS, чтобы они посмотрели что там да как
происходит при передаче параметров от фокса к ODBC и от ODBC к серверу...
Возможно где-то там и закралась ошибка.

На сервере с 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

Ratings: 0 negative/0 positive

Re: Ну конечно хочется нормально
Igor Korolyov

Сообщений: 34066
Дата: 27.08.04 02:19:02
А сделать чтоб через ODBC шло не Float никак не получится? Т.е. все
numeric-и будут конвертится во float?




------------------
WBR, Igor
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 3 (Гостей: 3)


© 2000-2021 Fox Club 
Яндекс.Метрика