데이터베이스에서 숫자의 정밀도와 스케일을 어떻게 해석합니까?


245

데이터베이스에 다음 열이 지정되어 있습니다. decimal (5,2)

이것을 어떻게 해석합니까?

SQL Server Management Studio에서 볼 때 열의 속성에 따르면 십진수 (숫자 정밀도, 숫자 스케일)를 의미합니다.

정밀도와 스케일은 실제 용어의 의미는 무엇입니까?

이것을 5 자리와 소수점 이하 두 자리가있는 10 진수로 해석하기 쉽습니다. 즉 12345.12

추신 : 나는 동료로부터 정답을 결정할 수 있었지만 온라인에서 답을 찾는 데 큰 어려움을 겪었습니다. 따라서 나중에 참조 할 수 있도록 질문과 답변을 stackoverflow에 문서화하고 싶습니다.

답변:


396

숫자 정밀도는 숫자에있는 최대 자릿수를 나타냅니다.

1234567.89의 정밀도는 9입니다

숫자 스케일은 최대 소수점 이하 자릿수를 나타냅니다.

즉 123456.789의 스케일은 3입니다.

따라서 decimal (5,2)에 허용되는 최대 값은 999.99입니다.


14
Microsoft Access와 같은 비율에서 입력의 정밀도와 스케일을 미리 정의 할 수있는 시스템을 사용하는 경우 백분율을 정수 형식으로 고려해야합니다. 이 경우 25.5 %는 정밀도 4와 3의 스케일 (1이 아님)이 .255로 간주되므로 필요합니다. 나는이 문제를 일찍 보았고 왜 스케일 1이 작동하지 않는지 궁금해했습니다.
Ashton 시트

1
@mezoid 음수 스케일 값은 무엇을 의미합니까?
Geek

@Geek technet.microsoft.com/en-us/library/ms187746.aspx 에 따르면 스케일은 0보다 작을 수 없습니다. 0 <= 스케일 <= 정밀도. 본질적으로 음의 스케일 값은 의미가 없습니다.
mezoid 2016 년


1
"숫자 정밀도는 숫자에 존재할 수있는 최대 자릿수를 나타냅니다." 정확한 숫자 123.5는 정밀도가 10 일 수 있지만 더 이상 추가 할 숫자는 없습니다. 아니면 123.5000000이됩니까?
Chris311

86

숫자의 정밀도는 자릿수입니다.

숫자의 스케일은 소수점 뒤의 자릿수입니다.

필드 정의에서 정밀도 및 스케일을 설정할 때 일반적으로 암시하는 것은 최대 값 을 나타냅니다 .

예, 진수 필드로 정의 precision=5하고 scale=2다음과 같은 값을 허용합니다 :

  • 123.45 (p = 5, s = 2)
  • 12.34 (p = 4, s = 2)
  • 12345 (p = 5, s = 0)
  • 123.4 (p = 4, s = 1)
  • 0 (p = 0, s = 0)

다음 값은 허용되지 않거나 데이터 손실을 일으킬 수 있습니다.

  • 12.345(p = 5, s = 3) => 12.35(p = 4, s = 2) 로 잘릴 수 있습니다.
  • 1234.56(p = 6, s = 2) => 1234.6(p = 5, s = 1) 로 잘릴 수 있습니다.
  • 123.456(p = 6, s = 3) => 123.46(p = 5, s = 2) 로 잘릴 수 있습니다.
  • 123450 (p = 6, s = 0) => 범위를 벗어남

범위는 일반적으로 정밀도로 정의됩니다. |value| < 10^p...


5
"소수점 왼쪽의 최대 자릿수를 결정하기 위해 [정밀도]에서 [스케일]을 빼면 MS SQL Server는 12345 또는 1234.56을 허용하지 않습니다." (출처 : decimal and numeric )
molnarm

어때요 12345000? 정밀 5 또는 8? 5이면 어떤 스케일로? 규모 -3?
towi

@towi 그게 무슨 뜻입니까? 저장하려면 8,0을 사용하십시오.
Rob Grant

좋은 대답이지만 왜 123450 (p=6,s=0)범위를 벗어 납니까? 123450에는 6 자리 숫자가 있고 포인트 뒤에 숫자가 없습니까?
Matthias Burger

1
@MatthiasBurger 123450 (p=6,s=0)는 예제에서 언급 한 것처럼 5 정밀도를 갖는 10 진수 필드의 범위를 벗어납니다. 필드에 저장하려는 숫자의 정밀도는 필드의 정밀도보다 작거나 같아야합니다.
Snozzlebert

26

SQL Server 2000 설명서의 정밀도, 스케일 및 길이 는 다음 같습니다.

정밀도는 숫자의 자릿수입니다. 스케일은 숫자에서 소수점 오른쪽의 자릿수입니다. 예를 들어 숫자 123.45의 정밀도는 5이고 스케일은 2입니다.


감사합니다. 방금 델파이 / 파스칼 코드가 0의 스케일을 사용하여 float의 소수 부분을 잘라 내고 있다는 것을 깨달았습니다
peterchaula
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.