반응형
BigDecimal 세트 스케일 및 라운드
이 두 통화의 차이점은 무엇입니까? (있어요?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
언급되지는 않았지만 직접적으로 언급되지 않은 중요한 점은 "정밀도" 와 "규모" 의 차이점 과 이들이 두 진술에서 어떻게 사용되는지입니다. "정밀도" 는 숫자의 총 유효 자릿수입니다. "scale" 은 소수점 오른쪽의 자릿수입니다.
MathContext 생성자는 정밀도 및 RoundingMode 만 인수로 허용하므로 스케일은 첫 번째 명령문에 지정되지 않습니다.
setScale()
분명히 RoundingMode와 마찬가지로 scale을 인수로 받아들이지 만 두 번째 명령문에는 정밀도가 지정되지 않습니다.
소수점을 한 자리 오른쪽으로 이동하면 차이가 분명해집니다.
// 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은 실제로 숫자의 스케일을 설정하지만 round는 숫자를 지정된 숫자로 반올림하지만 jdk에서 언급 한 것처럼 "정확한 결과의 가장 왼쪽 숫자부터 시작합니다". 따라서 샘플과 관련하여 결과는 동일하지만 대신 0.0034를 시도하십시오. 내 블로그에 대한 참고 사항은 다음과 같습니다.
http://araklefeistel.blogspot.com/2011/06/javamathbigdecimal-difference-between.html
참고 URL : https://stackoverflow.com/questions/3843440/bigdecimal-setscale-and-round
반응형
'Programing' 카테고리의 다른 글
컨트롤러의 Hibernate / JPA에서 게으른 페치 된 항목을로드하는 방법 (0) | 2020.07.02 |
---|---|
표준 정규화와 달리 softmax를 사용하는 이유는 무엇입니까? (0) | 2020.07.02 |
C를 사용하여 배열 반환 (0) | 2020.07.02 |
팬더 : 열의 텍스트를 여러 행으로 나누려면 어떻게합니까? (0) | 2020.07.02 |
단어에서 음절 감지 (0) | 2020.07.02 |