John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์˜ BigDecimal

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
ํšŒ์›
์•ˆ๋…•! ์˜ค๋Š˜ ์ˆ˜์—…์—์„œ๋Š” ํฐ ์ˆ˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ์ •๋ง ํฌ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ „์— ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ๊ฐ’ ๋ฒ”์œ„ ํ…Œ์ด๋ธ”์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์›์‹œ ์œ ํ˜• ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๊ฐ’ ๋ฒ”์œ„
๋ฐ”์ดํŠธ 8๋น„ํŠธ -128 ~ 127
์งง์€ 16๋น„ํŠธ -32768 ~ 32767
์ˆฏ 16๋น„ํŠธ 0 ~ 65536
์ •์ˆ˜ 32๋น„ํŠธ -2147483648 ~ 2147483647
๊ธด 64๋น„ํŠธ -9223372036854775808 ~ 9223372036854775807
๋œจ๋‹ค 32๋น„ํŠธ (2์˜ -149์Šน) ~ ((2์˜ -23์Šน) * 2์˜ 127์Šน)
๋”๋ธ” 64๋น„ํŠธ (-2์˜ 63์Šน) ~ ((2์˜ 63์Šน) - 1)
๋ถ€์šธ 8(๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ), 32(๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) ์ฐธ ๋˜๋Š” ๊ฑฐ์ง“
๊ฐ€์žฅ ๋„“์€ ์ •์ˆ˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ long ์ž…๋‹ˆ๋‹ค . ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋Š” double ์ž…๋‹ˆ๋‹ค . ํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ์ˆซ์ž๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ long ์—๋„ ๋งž์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š” ? Long ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ๋„“์ง€๋งŒ ์—ฌ์ „ํžˆ 64๋น„ํŠธ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ดˆ๋Œ€ํ˜• ์ˆซ์ž์— 100๋น„ํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‹คํ–‰ํžˆ๋„ ์šฐ๋ฆฌ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐœ๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด Java์—๋Š” BigInteger (์ •์ˆ˜์šฉ) ๋ฐ BigDecimal ์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ํŠน์ˆ˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.(๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž์˜ ๊ฒฝ์šฐ). ๊ทธ๋“ค์„ ํŠน๋ณ„ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์šฐ์„  ์ด๋ก ์ ์œผ๋กœ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌดํ•œํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ์ปดํ“จํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” "์ด๋ก ์ ์œผ๋กœ"๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์–‘๋ณด๋‹ค ํฐ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฌผ๋ก  ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ BigInteger ๋ฐ BigDecimal์€ ๊ฑฐ์˜ ๋ฌด์ œํ•œ ํฌ๊ธฐ์˜ ์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ๋ฌด์—‡์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๊นŒ? ์šฐ์„ , ๋งค์šฐ ์—„๊ฒฉํ•œ ์ •ํ™•๋„ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ€์ง„ ๊ณ„์‚ฐ์„ ์œ„ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ๊ฐ„์˜ ์ƒ๋ช…์€ ์ผ๋ถ€ ํ”„๋กœ๊ทธ๋žจ(์˜ˆ: ๋น„ํ–‰๊ธฐ, ๋กœ์ผ“ ๋˜๋Š” ์˜๋ฃŒ ์žฅ๋น„๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹์†Œํ”„ํŠธ์›จ์–ด)์˜ ๊ณ„์‚ฐ ์ •ํ™•๋„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†Œ์ˆ˜์  ์ดํ•˜ 150๋ฒˆ์งธ ์ž๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ BigDecimal์ตœ์„ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์˜ ์ •ํ™•ํ•œ ๊ณ„์‚ฐ๋„ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ธˆ์œต ๋ถ„์•ผ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. BigInteger ๋ฐ BigDecimal ๊ฐœ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
public class Main {

   public static void main(String[] args) {

       BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
       System.out.println(integer);

       BigDecimal decimal = new BigDecimal("123.444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444");
       System.out.println(decimal);
   }
}
๋ฌธ์ž์—ด์„ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ˆซ์ž๊ฐ€ long ๋ฐ double ์˜ ์ตœ๋Œ€๊ฐ’์„ ์ดˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์–ด๋–ค ์ˆซ์ž๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€์ง€ ์„ค๋ช…ํ•  ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 111111111111111111111111111111111111111111111111111111111111111111111 ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์ž‘์—…์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Java๋Š” ์ „๋‹ฌ๋œ ์ˆซ์ž๋ฅผ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋กœ ๋ฐ€์–ด ๋„ฃ์œผ๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ๊ทธ ์ค‘ ์–ด๋Š ๊ฒƒ์—๋„ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ˆซ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋‘ ํด๋ž˜์Šค ๋ชจ๋‘ ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž ๊ฐ’์„ ์ž๋™์œผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ ์ˆซ์ž์˜ ํด๋ž˜์Šค๋กœ ์ž‘์—…ํ•  ๋•Œ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ ์€ ๊ฐ์ฒด๊ฐ€ ๋ถˆ๋ณ€( Immutable )์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์œ ํ˜•(Integer, Long ๋“ฑ)์— ๋Œ€ํ•œ ๋ž˜ํผ ํด๋ž˜์Šค ๋ฐ String ํด๋ž˜์Šค ์— ๋Œ€ํ•œ ๊ฒฝํ—˜ ๋•๋ถ„์— ์ด๋ฏธ ๋ถˆ๋ณ€์„ฑ์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค .
import java.math.BigInteger;

public class Main {

   public static void main(String[] args) {

       BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
       System.out.println(integer);

       integer.add(BigInteger.valueOf(33333333));
       System.out.println(integer);

   }
}
์ฝ˜์†” ์ถœ๋ ฅ:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
์˜ˆ์ƒํ•˜์…จ๊ฒ ์ง€๋งŒ ์ €ํฌ ๋ฒˆํ˜ธ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
import java.math.BigInteger;

public class Main {

   public static void main(String[] args) {

       BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
       System.out.println(integer);

       BigInteger result = integer.add(BigInteger.valueOf(33333333));
       System.out.println(result);

   }
}
์ฝ˜์†” ์ถœ๋ ฅ:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111144444444
๋ณด์„ธ์š”, ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :) ๊ทธ๋Ÿฐ๋ฐ, ๋ง์…ˆ ์—ฐ์‚ฐ์ด ์–ผ๋งˆ๋‚˜ ํŠน์ดํ•œ์ง€ ๋ˆˆ์น˜์ฑ„์…จ๋‚˜์š”?
BigInteger result = integer.add(BigInteger.valueOf(33333333));
์ด๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ํฐ ์ˆซ์ž ํด๋ž˜์Šค๋Š” + - * / ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์ผ๋ จ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด Oracle ์„ค๋ช…์„œ( ์—ฌ๊ธฐ ๋ฐ ์—ฌ๊ธฐ )์—์„œ ์ „์ฒด ๋ฐฉ๋ฒ• ๋ชฉ๋ก์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ).
  1. ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ: add() , ๋บ„์…ˆ() , multiply() , divide() . ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ๊ฐ๊ฐ ๋ง์…ˆ, ๋บ„์…ˆ, ๊ณฑ์…ˆ ๋ฐ ๋‚˜๋ˆ—์…ˆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  2. doubleValue() , intValue() , floatValue() , longValue() ๋“ฑ์€ ํฐ ์ˆซ์ž๋ฅผ Java์˜ ๊ธฐ๋ณธ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ๋น„ํŠธ ํฌ๊ธฐ์˜ ์ฐจ์ด๋ฅผ ์žŠ์ง€ ๋งˆ์„ธ์š”!

    import java.math.BigInteger;
    
    public class Main {
    
       public static void main(String[] args) {
    
           BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
    
           long result = integer.longValue();
           System.out.println(result);
    
       }
    }

    ์ฝ˜์†” ์ถœ๋ ฅ:

    8198552921648689607
  3. min() ๋ฐ max()๋ฅผ ์‚ฌ์šฉ ํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ํฐ ์ˆซ์ž์˜ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋Š” ์ •์ ์ด ์•„๋‹™๋‹ˆ๋‹ค!

    import java.math.BigInteger;
    
    public class Main {
    
       public static void main(String[] args) {
    
           BigInteger integer = new BigInteger("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
           BigInteger integer2 = new BigInteger("222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222");
    
           System.out.println(integer.max(integer2));
    
       }
    }

    ์ฝ˜์†” ์ถœ๋ ฅ:

    222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

BigDecimal ๋ฐ˜์˜ฌ๋ฆผ ๋™์ž‘

ํฐ ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ๋ฐ˜์˜ฌ๋ฆผ ๋™์ž‘์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ•ญ๋ชฉ์—๋Š” ๋ณ„๋„์˜ ์„น์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. setScale() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ BigDecimal ์˜ ์†Œ์ˆ˜ ์ž๋ฆฟ์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆซ์ž 111.5555555555์˜ ์†Œ์ˆ˜์  ์ดํ•˜ ์„ธ ์ž๋ฆฌ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆซ์ž 3์„ setScale() ๋ฉ”์„œ๋“œ ์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด BigDecimal๊ณ„์‚ฐ ์ •๋ฐ€๋„์— ๋Œ€ํ•œ ์—„๊ฒฉํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ํ˜•์‹์—์„œ ์ˆซ์ž๋Š” ์†Œ์ˆ˜์  ์ดํ•˜ 10์ž๋ฆฌ์ž…๋‹ˆ๋‹ค. 7๊ฐœ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  3๊ฐœ๋งŒ ๋‚จ๊ธฐ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆซ์ž 3 ์™ธ์— ๋ฐ˜์˜ฌ๋ฆผ ๋ชจ๋“œ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. BigDecimal์—๋Š” ์ด 8๊ฐœ์˜ ๋ฐ˜์˜ฌ๋ฆผ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์ด! ๊ทธ๋Ÿฌ๋‚˜ ๊ณ„์‚ฐ์˜ ์ •๋ฐ€๋„๋ฅผ ๋ฏธ์„ธํ•˜๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–์ถ”๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. BigDecimal ์—์„œ ์ œ๊ณตํ•˜๋Š” 8๊ฐ€์ง€ ๋ฐ˜์˜ฌ๋ฆผ ๋ชจ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค .
  1. ROUND_CEILING โ€” ๋ฐ˜์˜ฌ๋ฆผ

    111.5555555555 -> setScale(3, ROUND_CEILING) -> 111.556
  2. ROUND_DOWN โ€” 0์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ

    111.5555555555 -> setScale(3, ROUND_DOWN) -> 111.555
  3. ROUND_FLOOR โ€” ๋‚ด๋ฆผ

    111.5555555555 -> setScale(3, ROUND_FLOOR) -> 111.555

  4. ROUND_HALF_UP โ€” ์†Œ์ˆ˜์  ์ดํ•˜ ์ˆซ์ž >= 0.5์ธ ๊ฒฝ์šฐ ๋ฐ˜์˜ฌ๋ฆผ

    0.55 -> setScale(1, ROUND_HALF_UP) -> 0.6
    0.54 -> setScale(1, ROUND_HALF_UP) -> 0.5
  5. ROUND_HALF_DOWN โ€” ์†Œ์ˆ˜์  ์ดํ•˜ ์ˆซ์ž > 0.5์ธ ๊ฒฝ์šฐ ๋ฐ˜์˜ฌ๋ฆผ

    0.55 -> setScale(1, ROUND_HALF_DOWN) -> 0.5
    0.56 -> setScale(1, ROUND_HALF_DOWN) -> 0.6
  6. ROUND_HALF_EVEN โ€” ๋ฐ˜์˜ฌ๋ฆผ์€ ์†Œ์ˆ˜์  ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆซ์ž์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์™ผ์ชฝ์˜ ์ˆซ์ž๊ฐ€ ์ง์ˆ˜์ด๋ฉด ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค. ์†Œ์ˆ˜์  ์™ผ์ชฝ์˜ ์ˆซ์ž๊ฐ€ ํ™€์ˆ˜์ด๋ฉด ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค.

    2.5 -> setScale(0, ROUND_HALF_EVEN) -> 2

    ์†Œ์ˆ˜์  ์™ผ์ชฝ์˜ ์ˆซ์ž๋Š” 2(์ง์ˆ˜)์ž…๋‹ˆ๋‹ค. ์ˆซ์ž๋Š” ๋‚ด๋ฆผํ•ฉ๋‹ˆ๋‹ค. ์†Œ์ˆ˜์  ์ดํ•˜ ์ž๋ฆฟ์ˆ˜ 0์„ ์›ํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” 2์ž…๋‹ˆ๋‹ค.

    3.5 -> setScale(0, ROUND_HALF_EVEN) -> 4

    ์†Œ์ˆ˜์  ์™ผ์ชฝ์˜ ์ˆซ์ž๋Š” 3(ํ™€์ˆ˜)์ž…๋‹ˆ๋‹ค. ์ˆซ์ž๋Š” ๋ฐ˜์˜ฌ๋ฆผ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์†Œ์ˆ˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ 0์ด๊ธฐ๋ฅผ ์›ํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” 4์ž…๋‹ˆ๋‹ค.

  7. ROUND_UNNECCESSARY โ€” ์ด ๋ชจ๋“œ๋Š” ๋ฐ˜์˜ฌ๋ฆผ ๋ชจ๋“œ๋ฅผ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌํ•ด์•ผ ํ•˜์ง€๋งŒ ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ROUND_UNNECCESSARY ๋ชจ๋“œ๊ฐ€ ์„ค์ •๋œ ์ƒํƒœ์—์„œ ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ArithmeticException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    3.51 -> setScale(1, ROUND_UNNECCESSARY) -> ArithmeticException
  8. ROUND_UP โ€” 0์—์„œ ๋ฉ€์–ด์ง€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค.

    111.5551 -> setScale(3, ROUND_UP) -> 111.556

ํฐ ์ˆซ์ž ๋น„๊ต

์ด๊ฒƒ์€ ๋˜ํ•œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. equals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java์—์„œ ๊ฐœ์ฒด๋ฅผ ๋น„๊ตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๊ตฌํ˜„์€ ์–ธ์–ด ์ž์ฒด(ํ‘œ์ค€ Java ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ)์—์„œ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ BigDecimal ๊ฐ์ฒด ์˜ ๊ฒฝ์šฐ ๋น„๊ต๋ฅผ ์œ„ํ•ด equals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. BigDecimal.equals() ๋ฉ”์„œ๋“œ๋Š” 2๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋™์ผํ•œ ๊ฐ’๊ณผ ๋ฐฐ์œจ์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ์—๋งŒ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค . Double ๋ฐ BigDecimal ํด๋ž˜์Šค ์— ๋Œ€ํ•œ equals() ๋ฉ”์„œ๋“œ ์˜ ๋™์ž‘์„ ๋น„๊ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .
import java.math.BigDecimal;

public class Main {

   public static void main(String[] args) {

       Double a = 1.5;
       Double b = 1.50;

       System.out.println(a.equals(b));

       BigDecimal x = new BigDecimal("1.5");
       BigDecimal y = new BigDecimal("1.50");

       System.out.println(x.equals(y));

   }
}
์ฝ˜์†” ์ถœ๋ ฅ:
true
false
๋ณด์‹œ ๋‹ค์‹œํ”ผ BigDecimal ์˜ ๊ฒฝ์šฐ ์ˆซ์ž 1.5์™€ 1.50์ด ๊ฐ™์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค! ์ด๊ฒƒ์€ ์ •ํ™•ํžˆ BigDecimal ํด๋ž˜์Šค ์˜ equals() ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค . ๋‘ ๊ฐœ์˜ BigDecimal ๊ฐ์ฒด๋ฅผ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ๋น„๊ตํ•˜๋ ค๋ฉด compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค .
import java.math.BigDecimal;

public class Main {

   public static void main(String[] args) {

       BigDecimal x = new BigDecimal("1.5");
       BigDecimal y = new BigDecimal("1.50");

       System.out.println(x.compareTo(y));

   }
}
์ฝ˜์†” ์ถœ๋ ฅ:
0
compareTo () ๋ฉ”์„œ๋“œ๋Š” 0์„ ๋ฐ˜ํ™˜ํ–ˆ์œผ๋ฉฐ ์ด๋Š” 1.5์™€ 1.50์ด ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค! :) ์ด๊ฒƒ์œผ๋กœ ์˜ค๋Š˜ ์ˆ˜์—…์„ ๋งˆ์นฉ๋‹ˆ๋‹ค. ์ด์ œ ์ž‘์—…์œผ๋กœ ๋Œ์•„๊ฐˆ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค! :)
์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค