programing

BigDecimal, 정밀도 및 스케일

copyandpastes 2021. 1. 17. 12:32
반응형

BigDecimal, 정밀도 및 스케일


예를 들어 JPA와 같이 내 응용 프로그램의 번호에 BigDecimal을 사용하고 있습니다. '정밀도'와 '스케일'이라는 용어에 대해 약간 조사했지만 정확히 무엇인지 이해하지 못합니다.

누구든지 BigDecimal 값에 대한 '정밀도'와 '스케일'의 의미를 설명 할 수 있습니까?

@Column(precision = 11, scale = 2)

감사!


A BigDecimal는 임의 정밀도 정수와 32 비트 정수 스케일의 두 값으로 정의됩니다 . 의 값 BigDecimal은로 정의됩니다 unscaledValue * 10 ^ {-scale}.

정도:

정밀도는 스케일 없음의 값의 자리수입니다. 예를 들어 숫자 123.45의 경우 반환되는 정밀도는 5입니다.

따라서 정밀도 는 임의 정밀도 정수의 길이를 나타냅니다. 다음은 척도가 같지만 정밀도가 다른 숫자의 몇 가지 예입니다.

  • 12345/100000 = 0.12345 // 스케일 = 5, 정밀도 = 5
  • 12340/100000 = 0.1234 // 스케일 = 5, 정밀도 = 4
  • 1/100000 = 0.00001 // 스케일 = 5, 정밀도 = 1

숫자가 0 (예 : 0.000)과 같은 특수한 경우 정밀도는 항상 1입니다.

규모:

0 또는 양수인 경우 스케일 은 소수점 오른쪽에있는 자릿수입니다. 음수 인 경우 숫자의 스케일되지 않은 값에 스케일 부정의 거듭 제곱에 10을 곱합니다. 예를 들어 스케일이 -3이면 스케일되지 않은 값에 1000을 곱한 것을 의미합니다.

이것은 'BigDecimal'의 정수 값에를 곱함을 의미 10 ^ {-scale}합니다.

다음은 스케일이 다른 동일한 정밀도의 몇 가지 예입니다.

  • 스케일 5 = 0.12345 인 12345
  • 스케일 4 = 1.2345 인 12345
  • 축척 0 = 12345 인 12345
  • 스케일 -1 인 12345 = 123450

BigDecimal.toString :

에 대한 toString방법 BigDecimal은 척도 및 precision. (이 점을 지적 해 주신 @RudyVelthuis에게 감사드립니다.)

  • 이면 scale == 0정수가 그대로 인쇄됩니다.
  • 이면 scale < 0전자 표기법이 항상 사용됩니다 (예 : 5 스케일 -1은 "5E + 1"을 생성 함).
  • 경우 scale >= 0precision - scale -1 >= -6일반 진수가 생산된다 (예를 들어 규모 1 "1000000.0"생산 10000000)
  • 그렇지 않으면 E- 표기가 사용됩니다. 예를 들어 10 스케일 8은 precision - scale -1같음 unscaledValue * 10 ^ {-scale}이 -6보다 작기 때문에 "1.0E-7"을 생성합니다 .

더 많은 예 :

  • 19/100 = 0.19 // 정수 = 19, 스케일 = 2, 정밀도 = 2
  • 1/1000 = 0.0001 // 정수 = 1, 스케일 = 4, 정밀도 = 1

  • 정밀도 : 총 유효 자릿수

  • 스케일 : 소수점 오른쪽 자릿수

자세한 내용은 BigDecimal클래스 문서를 참조하십시오.


Javadoc 인용 :

정밀도는 스케일되지 않은 값의 자릿수입니다.

0 또는 양수인 경우 스케일은 소수점 오른쪽에있는 자릿수입니다. 음수 인 경우 숫자의 스케일되지 않은 값에 스케일 부정의 거듭 제곱에 10을 곱합니다. 예를 들어 스케일이 -3이면 스케일되지 않은 값에 1000을 곱한 것을 의미합니다.


예제 주석에서 최대 자릿수는 소수점 뒤 2 개, 앞 9 개 (총 11 개)입니다. 123456789,01

참조 URL : https://stackoverflow.com/questions/35435691/bigdecimal-precision-and-scale

반응형