Неправильное значение при приведении значения float (24) к float (53) в SQL 2005 - PullRequest
0 голосов
/ 14 ноября 2009

я запускаю этот SQL-код в SQL 2005

declare @a as float(24)
set @a=0.85
select cast ( @a as float(53))

и результат

+0,850000023841858

кто-нибудь знает почему?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2009

Первые семь цифр являются уровнем точности по умолчанию для float, когда в объявлении float (N) значение N равно 24 или меньше. После этого цифры могут отображаться практически как угодно, если их преобразовать в более точное число. Это «плавающая точка».

http://msdn.microsoft.com/en-us/library/ms173773.aspx

1 голос
/ 14 ноября 2009

Число, которое вы видите, настолько близко, насколько компьютер может вписаться в число доступных ему двоичных цифр.

Если вы попытаетесь написать 1/3 в десятичном виде, но у вас будет достаточно места только для 8 цифр, самое близкое, что вы можете получить - 0.33333333. Это все еще довольно далеко, но если бы у вас было больше десятичных разрядов, вы могли бы получить более точные. Вероятно, это то же самое, что и лицо компьютера, но, хотя каждая из ваших последовательных цифр представляет 1/10, 1/100, 1/1000, компьютер работает в 1/2, 1/4, 1/8, 1/16 .

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