Отладка некоторых связанных с финансами SQL-кода показала странную проблему с числовой точностью (24,8).SQL Server 2005 числовые потери точности
Запуск следующего запроса на вашем MSSQL вы получите результат выражения * C + B, чтобы быть 0,123457
ВЫБРАТЬ A, B, C, A + B * C FROM ( SELECT CAST (+0,12345678 А.С. Числовой (24,8)) в виде, CAST (0 AS NUMERIC (24,8)) как В, CAST (500 AS NUMERIC (24,8)) AS С ) T
Так мы потеряли 2 значимых символа. Пытаясь получить это исправление по-разному, я получил, что преобразование результата промежуточного умножения (которое равно нулю) в числовое (24,8) будет работать нормально.
И, наконец, есть решение. Но все же у меня возникает вопрос - почему MSSQL ведет себя таким образом и какие преобразования типов действительно происходили в моем примере?
Вы имели в виду NUMERIC (32,6)) ?? Если сумма должна быть 38 – Edmondo1984
@ Edmondo1984 Пожалуйста, прочитайте ссылки и поймите, что означают оба числа. –
Вы говорите, что при умножении двух чисел (24,8) сервер попытается сохранить 16 бит и создать (32,6), как он станет 38,6?Спасибо – Edmondo1984