BigDecimal의 반올림 문제

1491 단어
BigDecimal 객체를 작성하는 데는 주로 두 가지가 있습니다.BigDecimal b1 = new BigDecimal("1.34");//1.34 BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34
이 중 b1은 new Big Decimal(Double.to String(1.34)이라고도 쓸 수 있는데, 직접 new Big Decimal(1.34)이라고 쓸 수도 있고, 그럴 수도 있지만, 정밀도 문제가 생길 뿐이다.BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625 BigDecimal two1 = new BigDecimal("1.34");//1.34
따라서 반올림할 때 반드시 더블 으로 반올림하지 마세요. 그렇지 않으면 정밀도 문제로 오차가 생길 수 있습니다. 예를 들어 다음과 같습니다.
System.out.println(new BigDecimal((double)0.85).setScale(1, BigDecimal.ROUND_HALF_UP));// 0.8

new Big Decimal(double)0.85)의 결과가 0.8499999999999777953907496915273663818359375이기 때문에 0.85가 아니라 String으로 반올림해야 돼요.
System.out.println(new BigDecimal(Double.toString(0.85)).setScale(1, BigDecimal.ROUND_HALF_UP));// 0.9

스트링도 돼요.format () 방법 반올림
System.out.println(String.format("%.1f", (double)0.85));//0.9

소수 사이의 연산은 정밀도 문제도 관련되기 때문에 모두 BigDecimal로 바꾸어 계산하는 것이 가장 좋다
public BigDecimal add(BigDecimal value);// 
public BigDecimal subtract(BigDecimal value);//  
public BigDecimal multiply(BigDecimal value);// 
public BigDecimal divide(BigDecimal value);// 

예를 들어 덧셈:
 BigDecimal b1 = new BigDecimal(Double.toString(value1));
 BigDecimal b2 = new BigDecimal(Double.toString(value2));
 System.out.println(b1.add(b2) + "");//b1 + b2

좋은 웹페이지 즐겨찾기