programing

BigDecimal setScale 및 라운드

goodsources 2022. 8. 18. 23:50
반응형

BigDecimal setScale 및 라운드

이 두 통화의 차이점은 무엇입니까? (없습니까?)

// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);

직접 언급되지는 않았지만 언급되지 않은 한 가지 중요한 포인트는 "정밀"과 "규모"의 차이와 두 가지 진술에서 사용되는 방법이다."control"은 숫자의 유효 자릿수의 합계입니다."scale"은 소수점 오른쪽에 있는 자릿수입니다.

MathContext 생성자는 정밀도와 반올림 모드만 인수로 받아들이기 때문에 첫 번째 문에는 배율이 지정되지 않습니다.

setScale()스케일뿐만 아니라 반올림 모드도 분명히 인수로 받아들이지만, 두 번째 문에서는 정밀도가 지정되지 않습니다.

소수점을 오른쪽으로 한 자리 이동하면 차이가 명확해집니다.

// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456

실제로 큰 차이가 있습니다.setScale은 숫자의 척도를 실제로 설정하는 반면 라운드는 지정된 자릿수로 숫자를 반올림하지만 jdk 내에서 "정확한 결과의 맨 왼쪽 자리부터" 시작합니다.따라서 당신의 샘플에 대한 결과는 동일하지만 대신 0.0034를 사용해 보십시오.제 블로그에 있는 메모는 다음과 같습니다.

http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html

언급URL : https://stackoverflow.com/questions/3843440/bigdecimal-setscale-and-round

반응형