[Java] new BigDecimal(), BigDecimal.valueOf()

해니·2025년 3월 25일
0

Java

목록 보기
28/34
post-thumbnail

부동소수점의 부정확성

  • Java에서 floatdouble 타입은 애초에 과학, 공학 계산을 위해 설계되었으며, 넓은 범위의 수에 대한 근사치를 빨리 산출하기 위한 이진 부동소수점 연산을 수행한다.
    • IEEE 754 표준에 의해 정수, 소수 등과 같은 숫자가 2진으로 저장되기 때문에 결과값이 부정확해진다.
    • 정확한 표기가 필요한 외화 환율이나 화폐를 다룰 때는 적절하지 않다.



✏️ float의 정밀도는 약 7자리 십진수, double의 정밀도는 약 15-16자리 십진수이다.✏️

💸 소수점에 대한 정확한 계산이 요구되거나 화폐 단위를 다룰 때는 BigDecimal을 사용해야 한다. 💸



BigDecimal 생성


new BigDecimal()

BigDecinmal value = new BigDecimal("123.45"); // 123.4
BigDecinmal value2 = new BigDecimal(123.45); // 123.44999999999999
  • double타입처럼 실수형을 인자로 전달하는 생성자는 근사치 값이 그대로 전달되어 정확한 값이 저장되지 않을 수 있기 때문에 사용하지 않는 것
  • 인자를 String으로 할당해야 정확한 값을 얻을 수 있다.



valueOf() 메서드

BigDecinmal value = BigDecimal.valueOf(123.45);
  • double 또는 float 타입 변수를 BigDecimal로 변환하는 방법
  • 내부에서 Double.toString() 을 통해 수를 문자열로 변환하여 BigDecimal 객체를 생성한다.
  • 문자열 인자를 받는 생성자를 통해 생성하는 것과 결과적으로 같다






출처

[Java] BigDecimal에 관한 고찰 🕵️‍♀️
Java - BigDecimal 사용하는 이유 (feat.부동소수점의 부정확성)
new BigDecimal과 BigDecimal.valueOf의 차이.

profile
💻 ⚾️ 🐻

0개의 댓글