Вставка значения в столбец с плавающей запятой SQL приводит к странному результату. - PullRequest
4 голосов
/ 29 октября 2008

Я работаю над устаревшим приложением ASP. Я пытаюсь вставить значение (40.33) в поле в SQL Server 2000, которое является типом с плавающей точкой. Каждое место, которое я вижу (через некоторые записи в журнале) в приложении, отправляет 40,33 в хранимую процедуру. Когда я запускаю SQL Profiler для базы данных во время вызова, значение, которое я вижу в трассировке, равно 4.033000183105469e + 001

Откуда весь лишний мусор (183105469)?

Почему при переходе в 40 или 40.25 ничего лишнего нет?

Это только один из странных побочных эффектов использования float? Когда я пишу что-то, я обычно использую деньги или десятичную или что-то еще, так что не знаком с типом данных float.

Ответы [ 3 ]

8 голосов
/ 29 октября 2008

Да, это странный, хотя хорошо известный побочный эффект от использования FLOAT.

В Microsoft SQL Server вы должны использовать точные числовые типы данных, такие как NUMERIC, DECIMAL , MONEY или SMALLMONEY , если вам нужны точные цифры с масштабом.

Не использовать FLOAT.

0 голосов
/ 29 октября 2008

Проблема в том, что значения с плавающей точкой не точны на 100%. Если вам нужно, чтобы ваши числа были точными (особенно при работе с денежными значениями) ... вам следует использовать тип десятичного числа.

0 голосов
/ 29 октября 2008

Я думаю, что это, вероятно, просто проблема точности - 0,33 часть числа не может быть представлена ​​точно в двоичном виде - это, вероятно, самый близкий, который вы можете получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...