Java의 BigDecimal 유형

1. 정의 필드에 높은 정밀도가 필요한 경우 일반적으로 BigDecimal유형이 사용됩니다 .
2. 일반적으로 사용되는 생성자
BigDecimal(int)는 매개 변수에 지정된 정수 값
BigDecimal(double)으로 객체 생성 매개 변수에 지정된 배정 밀도 값
BigDecimal(long)으로 객체 생성 매개 변수에
BigDecimal(String)지정된 정수 값 으로 객체 생성 문자열에 매개 변수에 지정된 값으로 객체 생성 객체
는 직접 BigDecimal 객체를 생성하고 다른 유형의 해당 값을 전달할 수 있지만 float 및 double 값을 전달하면 예측할 수없는 상황이 발생합니다.

double aa = 0.1116666;
BigDecimal bb = new BigDecimal(aa);
System.out.println("bb的值为"+bb);

결과는 다음과 같습니다.

bb的值为0.111666600000000004744293846670188941061496734619140625

원인 분석 :

1) 매개 변수 유형을 double사용한 구성 방법의 결과 다소 예측할 수 없습니다. Java로 newBigDecimal(0.1116666)작성하는 것이 BigDecimal정확히 동일 하다고 생각할 수도 0.1116666있지만 실제로는 동일 0.111666600000000004744293846670188941061496734619140625합니다. 이는 0.1116666정확하게 표현할 수 없기 때문입니다 double(또는이 경우 유한 길이 이진 십진수로 표현할 수 없음). 생성자에 전달 된 값은 정확히 같지 않습니다 0.1116666(표면적으로는이 값과 동일 함).

2) String공법 완전히 예측 : 필기 newBigDecimal(“0.1116666”)를 만들 것 BigDecimal, 예상 정확히 동일하다 0.1116666. 따라서 일반적으로 String먼저 시공 방법 을 사용하는 것이 좋습니다 .

경우 3) Double타입 d는 double차례 BigDeciamal, 첫 번째 사용 Double.toString(double)방법 또는 String.valueOf(double)방법 double으로 변환 String다음 호출 타입, BigDeciamal위한 파라미터 String의 실제 값에 해당 공법의 종류.
3. BigDecimal일반적인 방법에 대한 자세한 설명
1) 일반적인 방법
add(BigDecimal): BigDecimal개체에 값을 추가하여 개체를 반환 BigDecimal합니다.

subtract(BigDecimal): 객체 BigDecimal의 값을 빼고 BigDecimal객체 를 반환

multiply(BigDecimal): BigDecimal객체의 값을 곱하여 객체를 반환 BigDecimal합니다.

divide(BigDecimal): 객체 BigDecimal의 값을 나누고 BigDecimal객체 를 반환

toString(): BigDecimal객체의 값을 문자열로 변환

doubleValue(): BigDecimal객체의 값을 배정 밀도 숫자로 변환

floatValue(): BigDecimal객체의 값을 단 정밀도 숫자로 변환

longValue(): BigDecimal객체의 값을 긴 정수로 변환

intValue(): BigDecimal객체의 값을 정수로 변환
2), BigDecimal크기 비교
Java는 BigDecimal일반적으로 크기 비교 방법 사용 bigdemical합니다.compareTo

int a = bigdemical.compareTo(bigdemical2)

반품 결과 분석 :

A = -1 수단 bigdemical보다 작 bigdemical2;
A = 0, 수단은 bigdemical동일 bigdemical2;
a = 1 인 수단에 bigdemical큰 이상 bigdemical2,
예를 들면, A는보다 크거나 같 B

new bigdemica(a).compareTo(new bigdemical(b)) >= 0

4. BigDecima````格式化 由于NumberFormat 类的format () 方法可以使用BigDecimal 对象作为其参数,可以利用BigDecimal''`은 16 자리를 초과하는 통화 값, 백분율 값 및 일반 값에 대한 서식 제어를 수행합니다.

사용 타고 BigDecimal예제로 통화 및 백분율 서식을. 먼저 산술 연산 BigDecimal을 수행 한 후 개체를 만들고 BigDecimal각각 통화 및 백분율 형식에 대한 참조를 설정하고 마지막으로 BigDecimal개체를 format()메서드 매개 변수 사용하여 형식이 지정된 통화 값과 백분율을 출력합니다.

    NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用 
    NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用 
    percent.setMaximumFractionDigits(3); //百分比小数点最多3位 
    
    BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
    BigDecimal interestRate = new BigDecimal("0.008"); //利率   
    BigDecimal interest = loanAmount.multiply(interestRate); //相乘
 
    System.out.println("贷款金额:\t" + currency.format(loanAmount)); 
    System.out.println("利率:\t" + percent.format(interestRate)); 
    System.out.println("利息:\t" + currency.format(interest)); 

결과:

贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00

5. BigDecimal요약
정확한 소수점 계산이 필요한 경우 1).을 사용합니다 BigDecimal. BigDecimal성능 비율 doublefloat거대하고 복잡한 계산을 처리 할 때 불량을 특히 명백하다. 따라서 일반적인 정확도를 계산할 필요가 없습니다 BigDecimal.
2). 파라미터 유형과 함께 String생성자 를 사용 하십시오.

추천

출처blog.csdn.net/weixin_43213064/article/details/109562365