https://wakestand.tistory.com/203
에서 참조했습니다.
public static void main(String[] args) {
double val1 = 3.14;
double result = val1 + 1.00;
System.out.println(val1);
System.out.println(result);
float val2 = 3.14f;
float result2 = val2 + 1;
System.out.println(val2);
System.out.println(result2);
}
이와 같이 소수점을 더 했을 경우 다른 값이 나오는 상황이 있습니다.
이런 상황은 오류가 아니라
각종 프로그래밍 언어에서는 소수를 표현할 때
IEEE 754 부동 소수점 방식으로 소수를 표현하게 되는데
부동 소수점 방식은 범위가 넓은 대신
값이 정확하게 떨어지지 않고
근사치만 제공해주게 된다.
실제 소수 계산시에는 정밀도를 보정해주는 BigDecimal을 사용해야 한다.
BigDecimal은
BigDecimal 변수명 = new BigDecimal("값");
이런 식으로 선언 및 초기화를 하는데
값은 반드시 숫자가 아닌 문자 타입으로 넣어줘야 한다.
public static void main(String[] args) {
double val1 = 3.14;
float val2 = 1f;
BigDecimal c = new BigDecimal(String.valueOf(val1));
BigDecimal d = new BigDecimal(String.valueOf(val2));
System.out.println("더하기 : " + c.add(d));
System.out.println("빼기 : " + c.subtract(d));
System.out.println("곱하기 : " + c.multiply(d));
System.out.println("나누기 : " + c.divide(d));
}
댓글