[Effective Java]일반적인 프로그래밍 원칙들_3

Kim Ji Yun·2021년 11월 24일
0

Effective Java

목록 보기
3/9
post-thumbnail

3. 정확한 답이 필요하다면 float와 double은 피하라

  • float와 double은 특히 돈과 관계된 계산에는 적합하지 않음

ex11) 잘못된 돈계산 프로그램

//금전 계산에 부동 소수점 연산을 사용하는 잘못된 프로그램 
public static void main(String[] args) {
    double funds = 1.00;
    int itemsBought = 0;
    for (double price = .10; funds >= price; price += .10) {
        funds -= price;
        itemsBougth++;
    }
    System.out.println(itemBougth + " items bought.");
    System.out.println(“Change: $" + funds);
}

1달러를 가지고 있고 10센트, 20센트, 30센트 등의 가격이 붙은 사탕을 구매하려 할 때 가장 싼 사탕부터 시작해 차례대로 비싼 사탕을 구매시 몇 개의 사탕을 구매하고, 잔돈이 얼마인지 계산하는 예제

  • 돈 계산을 할 때는 BigDecimal, int 또는 long을 사용

ex12) ex11) 예제를 double 대신 BigDecimal로 변경

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 + " items bought.");
    System.out.println("Change: $" + funds);
}
  • 성능이 중요하고 소수점 아래 수를 직접 관리해도 상관없으며 계산할 수가 심하게 크지 않을 때는 int나 long 사용

ex13) 달러단위에서 센트 단위로 계산하기(int 형 사용)

public static void main(String[] args) {
    int itemsBought = 0;
    int funds = 100;
    for (int price = 10; funds >= price; price += 10) {
        funds -= price;
        itemsBought++;
    }
    System.out.println(itemsBought + " items bought.");
    System.out.println("Money left over: " + funds + " cents");
}

관계된 수치

  1. 십진수 아홉 개 이하로 표현이 기능할 때는 int 사용
  2. 18개 이하로 표현 가능할 때는 long 사용
  3. 그 이상일 때는 BigDecimal 사용

0개의 댓글