Ваш ответ находится на той же странице, на которую вы ссылались:
Для типа данных FLOAT n - это число битов, используемых для хранения мантиссы в научной нотации
24 бита мантиссы дают вам (приблизительно) 7 десятичных цифр точности (потому что 2 ^ 24 ~ = 10 ^ 7).
изменить добавить:
Обратите внимание, что все продолжают говорить «приблизительно» - это не просто так:)
Двоичные числа с плавающей запятой и десятичные литералы не обязательно играют вместе интуитивно понятным образом. Для справки прочитайте Что должен знать каждый ученый об арифметике с плавающей точкой . Также обратите внимание, что высказывание «примерно 7 десятичных цифр точность » не является несовместимым с возможностью хранить значение с более чем 7 значащими цифрами! Это, однако, означает, что этот тип данных не сможет различить, например, 0.180000082 и 0.180000083, потому что он на самом деле не хранит значение точное :
declare @f1 real
declare @f2 real
set @f1 = 0.180000082
set @f2 = 0.180000083
select @f1, @f2
select @f1 - @f2
------------- -------------
0.1800001 0.1800001
(1 row(s) affected)
-------------
0
(1 row(s) affected)
Дело в том, что real
совпадает с float(24)
, двоичным числом с плавающей запятой с 24 битами мантиссы, и я не верю, что есть способ изменить это. Типы с плавающей точкой, как правило, не очень хороший выбор, если вы хотите хранить точные десятичные числа.