Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Поведение CAST в 1sqlite (число прочтений - 2224 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Поведение CAST в 1sqlite
15. Декабря 2010 :: 03:31
Печать  
В запросе есть следующий кусок:
Код
Выбрать все
CAST(CASE WHEN Запрос.Цена = 0 THEN Запрос.Стоимость / Запрос.Норма ELSE Запрос.Цена END AS NUMERIC(15,2)) ЦенаСНДС 


Предполагалось, что на выходе будет возвращено числовое поле с указанной размерностью, однако в результате есть, например число 12.7899999999999.
Реально такое вылечить?
  
Наверх
 
IP записан
 
sava
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 56
Зарегистрирован: 18. Февраля 2010
Пол: Мужской
Re: Поведение CAST в 1sqlite
Ответ #1 - 15. Декабря 2010 :: 06:25
Печать  
типизируй
CAST(CASE WHEN Запрос.Цена = 0 THEN Запрос.Стоимость / Запрос.Норма ELSE Запрос.Цена END [ЦенаСНДС Число.15.2 ]
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Поведение CAST в 1sqlite
Ответ #2 - 15. Декабря 2010 :: 06:29
Печать  
sava писал(а) 15. Декабря 2010 :: 06:25:
типизируй
CAST(CASE WHEN Запрос.Цена = 0 THEN Запрос.Стоимость / Запрос.Норма ELSE Запрос.Цена END [ЦенаСНДС Число.15.2 ]

Спасибо. только [ЦенаСНДС :Число.15.2 ]
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Поведение CAST в 1sqlite
Ответ #3 - 16. Декабря 2010 :: 14:44
Печать  
В sqlite нет типа numeric, он только притворяется, что он есть.
Числа в sqlite либо только int64, либо double.
А с даблами всегда так - 12.79 невозможно точно записать в дабл.
Поэтому надо типизировать результат, 1sqlite конвертнет дабл в 1Cное число, и округлит его как указано в типизации.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Поведение CAST в 1sqlite
Ответ #4 - 17. Декабря 2010 :: 02:17
Печать  
orefkov писал(а) 16. Декабря 2010 :: 14:44:
В sqlite нет типа numeric, он только притворяется, что он есть.
Числа в sqlite либо только int64, либо double.
А с даблами всегда так - 12.79 невозможно точно записать в дабл.
Поэтому надо типизировать результат, 1sqlite конвертнет дабл в 1Cное число, и округлит его как указано в типизации.

Понял. нумерик пользую именно для сохранения точности. ну раз его тут нет - будем знать. спасибо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать