2008-10-29 2 views
4

레거시 ASP 응용 프로그램을 만들고 있습니다. SQL Server 2000에서 float 유형이되는 필드에 값 (40.33)을 삽입하려고합니다. 응용 프로그램에서 볼 수있는 모든 장소 (일부 로깅을 통해)는 저장 프로 시저에 40.33을 보냅니다. 전화가 걸려 오는 동안 데이터베이스에 대해 SQL 프로파일 러를 실행하면 추적에 표시되는 값은 4.033000183105469e + 001SQL float 열에 값을 삽입하면 이상한 결과가 발생합니다.

(183105469)에서 오는 추가 쓰레기는 어디입니까?

내가 40 세가되거나 40.25 세가 지나치게 빠르면 어떨까요?

float를 사용하는 이상한 부작용 중 하나입니까? 내가 뭔가를 쓰고있을 때 나는 일반적으로 돈이나 십진법 또는 다른 것을 사용한다. 그래서 float 데이터 유형에 친숙하지 않다.

답변

8

그래, 이건 이상한데, well-known, FLOAT를 사용하는 부작용이 있습니다.

Microsoft SQL Server에서 축척으로 정확한 숫자가 필요한 경우 NUMERIC, DECIMAL, MONEY or SMALLMONEY과 같은 정확한 숫자 데이터 유형을 사용해야합니다.

FLOAT를 사용하지 마십시오.

+0

+1; 나는 (본질적으로) 같은 것을 타이핑하고 있었다. :) –

+0

정말 이상하지 ... 수학 배경이 엄격하지 않은 한. ;-) 훌륭한 대답 –

+0

알 수 없거나 예기치 않은 이상한 일이있을 수 있습니다. :-) –

0

아마도 이것은 정밀도 문제 일 것입니다. 숫자의 0.33 부분을 정확히 바이너리로 표현할 수는 없습니다. 이는 아마도 여러분이 접근 할 수있는 가장 가까운 것일 것입니다.

0

문제는 100 % 정확하지 않습니다. 숫자가 정확하게 필요하면 (특히 금전적 가치를 다룰 때) ... Decimal 타입을 사용해야합니다.

+0

십진수도 100 % 정확하지 않습니다 ... –

관련 문제