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


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.