반응형
📝BigDecimal
Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다.
소수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이 유실될 수 있다.
Java 언어에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수이다
BigDecimal 단점
- 느린 연산 처리 속도
- 기보타입에 비해 많은 양의 리소스 차지
- 기본 타입보다 조금 불편한 사용법
double vs BigDecimal
- double 타입
- 내부적으로 수를 저장할 때 이진수의 근사치를 저장한다 (64비트 부동 소수점 자료형)
- BigDecimal 타입
- 내부적으로 수를 십진수로 저장하여 아주 작은 수과 큰 수의 연산에 대해 거의 무한한 정밀도를 보장한다
package hello.exception;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class study {
public static void main(String[] args) {
BigDecimal bigDecimalA = new BigDecimal("10.0000000000");
BigDecimal bigDecimalB = new BigDecimal("3.000000000");
DecimalFormat decimalFormat = new DecimalFormat("0.0000000000000000000000");
double a = 10.0000000000;
double b = 3.000000000;
/** a / b -> 기대값: 3.333333333333 **/
System.out.println(decimalFormat.format(a / b)); // 출력값 : 3.3333333333333335000000
// 20자리까지 표현하고 그 이후에는 반올림을 한다
BigDecimal result = bigDecimalA.divide(bigDecimalB, 20, RoundingMode.HALF_UP);
System.out.println(result); // 출력값 : 3.33333333333333333333
}
}
🔗 참고 및 출처
반응형