- BigDecimal: 정확한 부동소수 계산
부동소수는 소숫점값을 명확하게 나타내지 않아서 정확한 결과가 요구되는 계산에서 float와 double을 사용하지 않는 것이 좋다.
=> 정확한 결과에는 BigDecimal 사용
import java.math.BigDecimal; //import 필요
public class BigDecimalCalculate {
public static void main(String[] args) {
double d1 = 34.56789876;
double d2 = 34.2234;
double d3 = d1 + d2;
System.out.println(d3); //68.79129875999999
BigDecimal b1 = new BigDecimal("34.56789876");
BigDecimal b2 = new BigDecimal("34.2234");
BigDecimal b3 = b1.add(b2);
System.out.println(b3); //68.79129876
}
}
* BigDecimal 객체는 한 번 생성되면 값을 바꿀 수 없다. (b1, b2, b3는 immutable value)
* 객체이름.을 입력하면 BigDecimal 클래스로 다양한 연산을 할 수 있는 다양한 메서드들이 나온다.
- 매개변수의 따옴표 여부에 따른 출력값 차이: 문자열 / double
import java.math.BigDecimal;
public class BigDecimalCalculate {
public static void main(String[] args) {
/* 따옴표 O: 문자열 */
BigDecimal b1 = new BigDecimal("34.56789876");
BigDecimal b2 = new BigDecimal("34.2234");
System.out.println(b4); //34.56789876
System.out.println(b5); //34.2234
/* 따옴표 X: double */
BigDecimal b4 = new BigDecimal(34.56789876);
BigDecimal b5 = new BigDecimal(34.2234);
System.out.println(b4); //34.56789875999999850364474696107208728790283203125
System.out.println(b5); //34.223399999999998044586391188204288482666015625
}
}
따옴표를 쓰지 않으면 매개변수로 double을 사용해서 정확도가 떨어지게 된다.
따라서 정확한 결과를 얻기 위해서는 따옴표를 붙여 문자열을 사용해야 한다.
- 주의: BigDecimal과의 연산
BigDecimal은 BigDecimal 끼리만 연산 가능하다.
import java.math.BigDecimal;
public class BigDecimalCalculate {
public static void main(String[] args) {
BigDecimal n1 = new BigDecimal("11.5");
int i = 5;
n1.add(i); //error: int는 BigDecimal로 변환할 수 없다.
n1.add(new BigDecimal(i));
n1.multiply(new BigDecimal(i));
n1.divide(100); //error
n1.divide(new BigDecimal(100));
}
}
'Java' 카테고리의 다른 글
| boolean 자료형: 논리연산자(AND, OR, XOR) / &&와 & 연산자 차이 (0) | 2023.06.01 |
|---|---|
| [java] 자료형 data type / 형변환 (0) | 2023.06.01 |
| 생성자와 객체 생성 (0) | 2023.05.31 |
| 캡슐화, 추상화 개념 및 차이 (0) | 2023.05.31 |
| [java] eclipse에서 디버깅하는 방법 (0) | 2023.05.31 |