- float 와 double 타입은 정밀한 근사치로 계산하기 떄문에 정확한 계산이 필요한 경우 (금융) 사용하면 안된다.
1 2 3 4
| public static void main(String[] args) { System.out.println(1.03-0.42); System.out.println(1.00 - 9 * 0.10); }
|
double, long 타입을 사용해 정확한 계산이 나오지 않는 또다른 예시는 다음과 같다.
1 2 3 4 5 6 7 8
| double funds = 1.00; int itemsBought = 0; for (double price = 0.10 ; funds >= price ; price += 0.10){ funds -= price; itemsBought++; } System.out.println(itemsBought + "개 구입"); System.out.println("잔돈(달러):"+ funds );
|
금융 계산 처럼 정확한 계산이 필요한 경우에는 double,long 대신해서
- 성능이 중요한 경우라면 int,long타입을 사용하고 , 소수점을 직접 관리한다
- 성능이 중요하지 않은 경우라면 , BigDecimal 타입을 사용하고, BigDecimal API를 활용한다.
1 2 3 4 5 6 7 8 9 10
| final BigDecimal TEN_CENTS = new BigDecimal("0.10"); BigDecimal funds = new BigDecimal("1.00"); int itemsBought = 0; 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 );
|