아이템 60 정확한 답이 필요하다면 float와 double은 피하라
Effective Java 3e 아이템 60를 요약한 내용 입니다.
남은 돈을 계산해보자
// Q1. 1.03달러가 있었는데 그중 42센트를 사용할 경우 얼마가 남았을까?
System.out.println(1.03 - 0.42);
// result : 0.6.10000000000000001
// Q2. 1달러로 10센트짜리 사탕 9개를 살 경우에 얼마가 남았을까?
System.out.println(1.00 - 9 * 0.10);
// result : 0.0999999999999998금융 계산에는 BigDecimal, int 혹은 long을 사용하라
public static void main(String[] args) {
final BigDecimal TEN_CENTS = new BigDecimal(".10");
int itemsBought = 0;
BigDecimal funds = new BigDecimal("1.00");
for (BigDecimal price = TEN_CENTS;
funds.compareTo(price) >= 0;
price = price.add(TEN_CENTS)) {
funds = funds.subtract(price);
itemsBought++;
}
System.out.println(itemsBought + "개 구입");
System.out.println("잔돈(달러): " + funds);
}BigDecimal에도 단점은 있다.
BigDecimal의 대안으로 int 혹은 long 타입을 사용하라
정리
Last updated