programing

Big Decimal, 정밀도 및 확장성

sourcetip 2022. 10. 2. 23:16
반응형

Big Decimal, 정밀도 및 확장성

예를 들어 JPA를 사용하는 경우 어플리케이션 내 번호에 Big Decimal을 사용하고 있습니다.나는 '정밀'과 '척도'라는 용어에 대해 조금 조사를 해봤지만 정확히 무엇인지 모르겠다.

Big Decimal 값에 대한 '정밀'과 '스케일'의 의미를 설명해 줄 수 있는 사람?

@Column(precision = 11, scale = 2)

감사합니다!

A BigDecimal는 임의의 정밀도 정수와 32비트 정수 스케일의 두 가지 값으로 정의됩니다.의 값BigDecimal정의되어 있다uncalled Value*10^{-scale}.

정밀도:

정밀도는 스케일 해제된 값의 자릿수입니다.예를 들어 123.45의 경우 반환되는 정밀도는 5입니다.

, 정밀도는 임의의 정밀도 정수의 길이를 나타냅니다.다음은 같은 척도로 정밀도가 다른 숫자의 예입니다.

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

숫자가 0(0.000)인 특별한 경우 정밀도는 항상 1입니다.

규모:

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

이것은 'BigDecimal'의 정수 값에10^{-스케일}.

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

  • 스케일 5의 12345 = 0.12345
  • 스케일 4의 12345 = 1.2345
  • 스케일 0의 12345 = 12345
  • 스케일 -1 = 123450 †의 12345

BigDecimal.toString:

toString에 대한 방법BigDecimal규모에 따라 다르게 동작합니다.precision(@RudyVelthuis님이 지적해 주셔서 감사합니다.)

  • 한다면scale == 0이 정수는 그대로 출력됩니다.
  • 한다면scale < 0, E-Notation은 항상 사용됩니다(예: 5 스케일 -1은 "5E+1"을 생성합니다).
  • 한다면scale >= 0그리고.precision - scale -1 >= -6평소 10진수가 생성된다(예: 10000000 척도 1은 "190000"을 생성한다).0")
  • 그렇지 않으면 E-Notation이 사용됩니다. 예를 들어 10 스케일 8은 다음 시간 이후부터 "1.0E-7"을 생성합니다.precision - scale -1동등.uncalled Value*10^{-scale}-6 미만입니다.

기타 예:

  • 19/100 = 0.19 // 정수 = 19, 척도 = 2, 정밀도 = 2
  • 1/1000 = 0.0001 // 정수 = 1, 스케일 = 4, 정밀도 = 1
  • 정밀도:유효 자리수의 합계

  • 척도: 소수점 오른쪽에 있는 자릿수

상세한 것에 대하여는, 클래스의 메뉴얼을 참조해 주세요.

Javadoc 인용:

정밀도는 스케일 해제된 값의 자릿수입니다.

그리고.

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

, 자릿수는 이전(입니다.「 2 」 、 「 9 ( 11 ) 。123456789,01

Precision은 숫자의 유효 자리수의 합계입니다.스케일은 소수점 오른쪽에 있는 자릿수입니다.

예:

123.456 Precision=6 스케일=3

10 Precision=2 스케일=0

-96.9923 정밀도=6 스케일=4

0.0 정밀도=1 척도=1

음의 척도

음수 척도 값의 경우 다음 공식을 적용합니다. 결과 = (지정된 숫자) * 10 ^ (-(척도 값))

지정된 번호 = 1234.56

척도 = -5

-> (1234.56) * 10^(-(-5))

-> (1234.56) * 10^(+5)

-> 123456000

참고 자료: https://www.logicbig.com/quick-info/programming/precision-and-scale.html

언급URL : https://stackoverflow.com/questions/35435691/bigdecimal-precision-and-scale

반응형