반응형
정수
int나 long과 같은 데이터타입의 범위(대략 9,223,372,036,854,775,807) 를 넘는 숫자는
각 숫자를 BigInteger class의 객체로 나타낼 수 있습니다.
import java.Math.BigInteger;
BigInteger b1 = new BigInteger("12345678901234567890");
BigInteger b2 = new BigInteger("1");
System.out.println(b1.compareTo(b2)); // b1>b2면 1, 같으면 0, b1<b2 면 -1 반환
System.out.println(b1.add(b2)); // (+)
System.out.println(b1.subtract(b2)); // (-)
System.out.println(b1.multiply(b2)); // (*)
System.out.println(b1.divide(b2)); // (/)
System.out.println(b1.remainder(b2)); // (%)
System.out.println(b1+"은 (int)"+b1.intValue()+"입니다."); // int형으로 변환
1234567890123412341234567891 1234567890123412341234567889 1234567890123412341234567890 1234567890123412341234567890 0 1234567890123412341234567890은 (int)-264795438입니다. |
실수
float 또는 double 형은 해당 숫자의 근사치를 저장하기 때문에 보다 정확한 표현을 위해서는 BigDecimal 클래스를 이용할 필요가 있습니다.
import java.math.BigDecimal;
class Main {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("0.01");
BigDecimal bd2 = new BigDecimal(0.01);
BigDecimal bd3 = BigDecimal.valueOf(0);
BigDecimal bd4 = BigDecimal.valueOf(0.01);
if(!bd1.equals(bd2)) System.out.println(bd1+"!="+bd2);
if(!bd2.equals(bd4)) System.out.println(bd2+"!="+bd4);
if(bd1.compareTo(bd2)==1) System.out.println(bd1.subtract(bd2));
if(bd3 == BigDecimal.ZERO) System.out.println("bd3은" + BigDecimal.ZERO.intValue());
else if(bd3 == BigDecimal.ONE) System.out.println("bd3은" + BigDecimal.ZERO.intValue());
System.out.println(bd1.multiply(BigDecimal.TEN).doubleValue());
}
}
0.01!=0.01000000000000000020816681711721685132943093776702880859375 0.01000000000000000020816681711721685132943093776702880859375!=0.01 bd3은0 0.1 |
생성자로 객체를 생성할 때에는 문자열을 인자로 넣거나 ( bd1 ) valueOf 라는 메서드를 이용합니다. ( bd4 )
double 타입의 변수에는 0.01 를 대입하더라도
실제로는 0.01000000000000000020816681711721685132943093776702880859375 가 저장되기 때문에,
bd2 같은 녀석은 태어나자마자 BigDecimal 로서의 존재 가치를 상실하게 됩니다.
사칙연산 비교연산 및 형 변환은 BigDecimal과 유사합니다.
또, 자주 쓰는 0, 1, 10 은 상수로 저장( BigDecimal.ZERO , BigDecimal.ONE, BigDecimal.TEN) 되어 있어 유용합니다.
반응형
'Java & Spring' 카테고리의 다른 글
java) 스레드 Thread 와 동기화 (0) | 2021.12.09 |
---|---|
Java 입출력을 위한 BufferedReader / BufferedWriter (0) | 2021.11.14 |
Java NumberFormatException 에 대처하는 우리들의 자세 (0) | 2021.10.27 |
Java 에서 swap 하는 방법 (0) | 2021.10.27 |
Java 정규표현식 - 2. 문자열에서 숫자 등 추출하기 (0) | 2021.10.25 |
댓글