Следующий запрос возвращает разные значения в Sybase и SQL Server.
select CONVERT(numeric(12, 6), round((-0.00193499999999991) / (30) * (9) + 9.742500000000000e-001, 6))
В Sybase он возвращает 0,973670, в то время как в SQL Server он возвращает 0,973669. Знаете ли вы, почему и какой результат является правильным?
Изменение точности округления с 6 на 7 приводит к тому, что Sybase также возвращает 0,973669, но я не уверен, почему это необходимо. SQL Сервер также возвращает 0,973669 с круглой точностью 7
select CONVERT(numeric(12, 6), round((-0.00193499999999991) / (30) * (9) + 9.742500000000000e-001, 7))
Спасибо
Решено : ответ Гордана ниже указал мне правильное направление. Я забыл упомянуть одну деталь. Литералы в запросе на самом деле были значениями, считанными как переменные в Stored Pro c, который затем использовался в опубликованном мной запросе. Источником литеральных значений была разница между двумя полями базы данных, объявленными цифрами c (10,6). У устаревшего SP есть две переменные, объявленные как float, а разница 0,972315 и 0,974250 выдает -0,001935, однако на SQL Server он выдает -0,00193499999999991, что неудивительно, поскольку его математика с плавающей запятой. Таким образом, Sybase маскировал проблему. Изменение переменной SP на тип Numberri c (12,6) решило проблему и результаты в Sybase и SQL Соответствие сервера. Я рассмотрю другой код SP для использования переменных типа float.