Bigdecimal 소개
JDK 문서 (중국어)의 설명은 다음과 같습니다.
불변의 서명 된 십진수 수의 임의의 정밀도. Bigdecimal은 정밀도의 정수 비 규모 및 32 비트 정수 척도로 구성됩니다. 0이거나 양수 인 경우 스케일은 소수점 이후의 자릿수 수입니다. 음수 인 경우 숫자의 비 스케일 값에 음수 스케일 전력 10을 곱합니다. 따라서 BigDecimal으로 표시되는 값은 (UnscaledValue × 10-Scale)입니다.
구체적인 설명
1. "Bigdecimal 객체의 값은 불변"입니다. 이것은 BigDecimal 객체의 작동 함수 에서이 기능을 보여줍니다.
코드 사본은 다음과 같습니다. bigdecimal a = new bigdecimal ( "1.22");
System.out.println ( "문자열 값을 가진 구성 :" + a);
bigdecimal b = 새로운 bigdecimal ( "2.22");
A.add (b);
System.out.println ( "a plus b is :" + a);
출력 할 것이라고 생각하기 쉽습니다.
StringValue로 구성하십시오 : 1.22
A 플러스 B : 3.44
그러나 실제로 A는 플러스 B입니다. 1.22
2. "Bigdecimal은 정밀도의 정수 및 32 비트 정수 스케일의 정수 비 규모 값으로 구성됩니다. 스케일 값이 0이거나 양수 인 경우 스케일은 소수점 이후 자리수 수입니다." 이 문장은 다음과 같이 읽을 수 있습니다.
예를 들어 : -12 및 13.412
표현 : -12 × 10-0 및 13412 × 10-3
여기 (비 스케일 값과 스케일)는 각각 [-12, 0] 및 [13412, 3]로 표시됩니다.
3. "스케일 값이 음수 인 경우 숫자의 비 규모 값에 음수 스케일 전력 10을 곱하십시오" ". 이 문장은 다음과 같이 읽을 수 있습니다.
예를 들어 : 120.00
이 값은 다음과 같이 표현됩니다. 12000 × 10-2
여기에서 (비 규모 값과 규모)는 다음과 같이 표현됩니다. [12000, 2]
여기서 척도의 가치는 여전히 긍정적이지만 다음 작업을 수행합니다.
bigdecimal mold = new bigdecimal ( "-120.00");
//이 소수점과 동일한 BigDecimal Numerical을 반환하지만이 표현에서 모든 꼬리 0을 제거합니다.
금액 = 금액 .Striptrailingzeros ();
이 값은 다음과 같이 표현됩니다. 12 × 10- (-1)
여기 (비 규모 값과 규모)는 다음과 같이 표현됩니다. [12, -1]
사용에 대한 메모
1. 생성자
코드 사본은 다음과 같습니다. bigdecimal adouble = new bigdecimal (1.22);
System.out.println ( "이중 값을 가진 구성 :" + adouble);
bigdecimal astring = new bigdecimal ( "1.22");
System.out.println ( "문자열 값을 가진 구성 :" + astring);
출력 결과는 다음과 같습니다.
이중 값으로 구성하십시오 : 1.21999999999999999999999935447408996243029832839658203125
문자열 값으로 구성 : 1.22
JDK에 대한 설명 :
a) 매개 변수 유형 Double이있는 시공 방법의 결과는 예측할 수 없습니다. 일부 사람들은 Java에 Newbigdecimal (0.1)을 작성하여 만든 큰 사람들이 정확히 0.1 (비 규모 값 1, 스케일은 1)과 정확히 같지만 실제로는 0.100000000000000000000000000055511151231257827021181584541515625라고 생각할 수도 있습니다. 이는 0.1을 이중으로 정확하게 표현할 수 없기 때문에 (또는이 경우 유한 길이 이진 십진수로 표현할 수 없음). 이러한 방식으로, 건축 방법으로 전달 된 값은 0.1과 정확히 같지 않습니다 (해당 값과 동일하지만).
b) 반면에, 문자열 생성자는 완전히 예측 가능하다. 따라서, 이에 비해 일반적으로 문자열 생성자를 먼저 사용하는 것이 좋습니다.
c) 이중이 BigDecimal의 소스로 사용되어야하는 경우이 생성자는 정확한 변환을 제공합니다. 다음과 같은 결과를 제공하지 않습니다. 먼저 Double.tostring (Double) 메소드를 사용한 다음 BigDecimal (String) 생성자를 사용하십시오. Double을 String으로 변환하려면 String의 정적 메소드 인 String.valueof (double)를 사용할 수도 있습니다.
2. 운영. 추가, 뺄셈, 곱셈 및 부서는 실제로 새로운 Bigdecimal 객체를 반환합니다. Bigdecimal은 불변이 아니며 각 작동 단계를 수행 할 때 새로운 객체가 생성되므로 A.add (b); 추가 작업이 수행되지만 A는 추가 작업 후에 값을 저장하지 않습니다. 올바른 사용법은 a = a.add (b) 여야합니다.
예:
Bigdecimal 객체가 정수인지 확인하십시오.
다음과 같이 코드를 복사하십시오. 개인 부울 isintegervalue (bigdecimal bd) {
bd.signum () == 0 ||를 반환합니다 bd.scale () <= 0 || bd.striptrailingzeros (). scale () <= 0;
}
왜 이렇게합니까? 다음 예제를 테스트하십시오.
다음과 같이 코드를 복사하십시오. bigdecimal molk = new bigdecimal ( "-120.00"); // "0", "0.00", "1.00", "10.00"및 "10.10"을 시도하십시오.
System.out.println (and and alks.signum ()); // 긍정적이고 음수
System.out.println (and aveS.Scale ()); //규모
System.out.println (andstriptrailingzeros (). scale ()); // 제로 링 후 스케일
참조 : 클래스 빅데스