[x.00, x.99]
의 십진수의 경우 x
이 임의의 정수인 경우 (여기에서 컨텍스트의 일부로 추측 할 수 있음) 일반적으로 부동 소수점 데이터 유형은 상당히 부정확하고 때로는 위험한 것으로 간주됩니다. 대신 10 진수 데이터 유형이있는 언어에서는 소수가 선호되는 경우가 많습니다. SQL은 그러한 언어 중 하나입니다.SQL Server에서 부동 소수점 필드에서 .00과 .99 사이의 모든 소수 자릿수가 정확하게 표시되는 이유는 무엇입니까?
1.1
2.2
2.2
되어서는 안된다는 오른쪽 :
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1](
[SomeFloat] [float] NOT NULL
) ON [PRIMARY]
GO
INSERT INTO Table_1 VALUES (1.1)
SELECT SomeFloat FROM Table_1
SELECT SomeFloat + SomeFloat FROM Table_1
UPDATE Table_1 SET SomeFloat = SomeFloat + SomeFloat
SELECT SomeFloat FROM Table_1
이 다음 반환
말했다되는 것을 여기에 SQL Server의 흥미로운 작은 실험입니까? x.1
은 SQL이 아닌 부동 소수점 숫자로 저장 될 수 있다고 가정합니다. 많은 언어가 아닙니다. 대신, base-2로 작업 할 때 제한으로 인해 반올림해서는 안됩니까?
하지만 그렇지 않습니다. 형태가 다른 것도 없습니다 [x.00, x.99]
. 그들은 모두 float
데이터 유형을 사용하고 있음에도 불구하고 정확하게 표현되었습니다.
처음에는 문제가 있음을 정당화 할 수 없다면 float
에서 decimal
까지 일부 내용을 변경할 수 없습니다. SQL Server 2012를 사용하고 있습니다. 자동으로이 문제를 해결하고이 숫자를 내부적으로 varchar
으로 변환합니까? 얼마나 신뢰할 수 있니? 감사.
해당 숫자 *는 반올림됩니다. 소수점 이하 15 자리까지 정확하기 때문에 말할 수 없습니다. – Gabe
MSDN에서 "부동 소수점 값은 정수형으로 변환 될 때 잘립니다."부동 소수점 값이 부정확하다는 사실은 1.1 + 1.1보다 약간 복잡합니다. – Luaan
플로트 형식으로 저장하고 싶지 않은 이유 때문에이 게시물을 살펴보십시오. http://decipherinfosys.wordpress.com/2009/04/29/floating-point-arithmetic/ –