Item 60. Decimal Calculation

์ •ํ™•ํ•œ ๋‹ต์ด ํ•„์š”ํ•˜๋‹ค๋ฉด float์™€ double์€ ํ”ผํ•˜๋ผ.

float์™€ double ํƒ€์ž…์€ ๊ณผํ•™๊ณผ ๊ณตํ•™ ๊ณ„์‚ฐ์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋Š”๋ฐ, ๋„“์€ ๋ฒ”์œ„ ์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ •๋ฐ€ํ•œ ๊ทผ์‚ฌ์น˜๋กœ ๊ณ„์‚ฐํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ์ •ํ™•ํ•œ ๋‹ต์ด ํ•„์š”ํ•˜๋‹ค๋ฉด float์™€ double์€ ํ”ผํ•ด์•ผ ํ•œ๋‹ค.

class Example {

    public static void main(String[] args) {
        System.out.println(1.03 - 0.42);        // 0.6100000000000001
        System.out.println(1.00 - 9 * 0.10);    // 0.09999999999999998

        double funds = 1.00;
        int itemsBought = 0;
        for (double price = 0.10; funds >= price; price += 0.10) {
            funds -= price;
            itemsBought++;
        }
        System.out.println(itemsBought + " items bought.");    // 3 items bought.
        System.out.println("Change: $" + funds);               // Change: $0.3999999999999999
    }
}

์œ„ ๊ฒฐ๊ณผ๋Š” ๊ฐ๊ฐ 0.6, 0,1, 4, 0์ด ๋‚˜์˜ค๊ธธ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ ์†Œ์ˆ˜์ ์„ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜์ง€ ๋ชปํ•ด ์˜ค์ฐจ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  BigDecimal, int, long์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  • BigDecimal : ์ •ํ™•ํ•œ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•  ๋•Œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋Š๋ฆฌ๊ณ  ์“ฐ๊ธฐ ๋ถˆํŽธํ•˜๋‹ค.

class Example {

    public static void main(String[] args) {
        final BigDecimal TEN_CENTS = new BigDecimal(".10");

        BigDecimal funds = new BigDecimal("1.00");
        int itemsBought = 0;
        for (BigDecimal price = new BigDecimal("0.10"); funds.compareTo(price) >= 0; price = price.add(new BigDecimal("0.10"))) {
            funds = funds.subtract(price);
            itemsBought++;
        }
        System.out.println(itemsBought + " items bought.");    // 4 items bought.
        System.out.println("Change: $" + funds);               // Change: $0.00
    }
}
  • int / long : ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜์ง€๋งŒ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜๊ณ  ์†Œ์ˆ˜์ ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.(์˜ˆ์‹œ๋Š” ๋‹จ์œ„๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ)

class Example {

    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.");    // 4 items bought.
        System.out.println("Change: $" + funds);               // Change: $0
    }
}

Last updated

Was this helpful?