1. Bigdecimal 소개
Bigdecimal은 정밀도의 정수 비 규모 및 32 비트 정수 척도로 구성됩니다. 0이거나 양수 인 경우 스케일은 소수점 이후의 자릿수 수입니다. 음수 인 경우 숫자의 비 스케일 값에 음수 스케일 전력 10을 곱합니다. 따라서 BigDecimal으로 표시되는 값은 ( unscaledValue × 10-scale )입니다.
2. Bigdecimal의 소개
숫자 값의 고정밀 계산이 필요한 은행 및 금융과 같은 Java 프로그래밍 언어를 사용할 때, 특히 부동 소수점 데이터를 처리 할 때 일반적인 int , long , float 및 double 유형 대신 BigDecimal 및 BigInteger 사용합니다.
먼저 계산 및 인쇄 결과를 위해 기본 데이터 double 을 사용하는 코드 데모를 살펴 보겠습니다.
public class mainclass {public static void main (String [] args) {System.out.println (0.02+0.01); System.out.println (0.05+0.01); }}결과는 다음과 같습니다.
0.030.0600000000000000000000005
문제는 두 번째 결과가있는 데이터가 왜 나타나나요? 근본적인 이유는 우리 컴퓨터가 이진이며 바이너리가 플로팅 포인트 수를 정확하게 나타낼 수 없기 때문입니다. CPU가 "Mandrel and Exponent"메소드 (과학 표기법)를 사용하여 부동 소수점 번호를 표현할 때 특정 오류가 있습니다. 따라서 데이터 정확도 요구 사항이 상대적으로 높을 때 계산 속도는 약간 느리지 만 Bigdecimal 클래스를 여전히 사용해야합니다.
3.Bigdecimal 사용
BigDecimal 객체를 만드는 방법에는 생성자와 공개 정적 메소드 ( BigDecimal.valueOf )가 있습니다. 두 지점에주의를 기울여야합니다.
1. 생성자에는 기본 데이터 유형과 문자열을 매개 변수로 사용하는 두 가지 형태가 포함되어 있습니다. 후자는 다음과 같이 권장됩니다. new BigDecimal(Double.valueOf(0.09)) . 당신은 그것을 시도 할 수 있습니다. System.out.println(new BigDecimal(0.06).toString()); 성명서는 다음과 같습니다. 0.05999999999999999999977953950749686919152736663818359375
2. 소수점이 로그 또는 기본 데이터 유형으로 변환 할 때 간단하고 원유 toString() 대신 doubleValue() 와 같이 제공 한 공개 메소드 xxxValue() 사용하십시오.
4. 큰 반올림 모드
데이터베이스는 고정밀 부동산 지점 번호를 저장하지만 응용 프로그램에 2 ~ 3 개의 소수점과 같은 소수점 자리 수를 제한해야합니다. 현재 SetScale ( int newScale, int roundingMode ) 기능을 사용해야합니다. Bigdecimal의 공개 정적 변수로서, 반올림 모드 (반올림 모드)에 대한 많은 작업 규칙이 있으며 8 가지 공개 유형이 있습니다. 다음은 설명이 있으며 공식 문서도 소개합니다.
1. Round_up
0에서 둥글게. 0이 아닌 부분을 포기하고 0이 아닌 부분에 인접한 숫자를 추가하십시오.
2. Round_down
0에 가까운 방향으로 반올림합니다. 0이 아닌 부분을 포기하고 동시에 인접한 한 숫자는 0이 아닌 부분에 하나를 추가하고 동작을 가로 채어 버리지 않습니다.
3. Round_ceiling
무한 방향으로 둥글다. 양수 인 경우 반올림 결과는 Round_up과 동일합니다. 음수 인 경우 반올림 결과는 Round_down과 동일합니다. 참고 :이 모드는 값 크기를 줄이지 않습니다.
4. Round_floor
부정적인 무한 방향으로 둥글다. 양수 인 경우 반올림 결과는 Round_down과 동일합니다. 음수 인 경우 반올림 결과는 Round_up과 동일합니다. 참고 :이 모드는 값 크기를 증가시키지 않습니다.
5. Round_half_up
"가장 가까운"숫자로 반올림하는 것은 인접한 숫자로의 거리가 동일하면 상향 반올림의 반올림 모드입니다. 부품이 버려지면> = 0.5, 반올림 동작은 Round_up과 동일합니다. 그렇지 않으면 반올림 동작은 Round_down과 동일합니다. 이 패턴은 우리가 종종 "반올림"이라고 부르는 것입니다.
6. Round_half_down
"가장 가까운"숫자로 반올림하는 것은 두 개의 인접한 숫자로의 거리가 같으면 반올림 모드입니다. 폐기 된 부품> 0.5 인 경우, 반올림 동작은 Round_up과 동일합니다. 그렇지 않으면 반올림 동작은 Round_down과 동일합니다. 이 모델은 우리가 종종 "반올림"이라고 부르는 것입니다.
7. Round_half_even
두 개의 인접한 숫자까지의 거리가 같으면 인접한 짝수 숫자가 반올림됩니다. 부품 왼쪽의 홀수가 폐기되면 반올림 동작은 Round_half_up과 동일합니다. 짝수 인 경우 반올림 동작은 Round_half_down과 동일합니다. 참고 :이 라운딩 모드는 일련의 계산이 반복 될 때 축적 오류를 최소화합니다. 이 반올림 모드는 "Banker Rounding Method"라고도하며 주로 미국에서 사용됩니다. 6 개로 6 개, 5 개는 두 가지 상황으로. 이전의 홀수가 홀수 인 경우 위치에 들어가면 버려집니다.
8. Round_uncessary
어설 션 요청의 운영에는 정확한 결과가 있으므로 반올림이 필요하지 않습니다. 이 반올림 모드가 정확한 결과를 얻는 작업에 대해 지정되면 ArithMeticexception이 재투됩니다.
아래에서 숫자 계산 결과가 다른 반올림 모드에서 하나의 소수점을 유지하는 예를 들어 보겠습니다.
5. 요약
위의 것은 Bigdecimal 및 8 개의 반올림 모드의 전체 도입입니다. 이 기사의 내용이 Java를 배우는 모든 사람들에게 도움이되기를 바랍니다.