728x90
반응형
BigDecimal
- 왜사용하는지 알아본다
- double 의 제한사항을 해결해준다.
- https://vprog1215.tistory.com/288 - 사용시 주의점을 알아본다.
BigDecimal 을 사용하는 이유
- java 에서 숫자를 정밀하게 표현하기 위해 사용이 된다.
- 큰 소수점이나 큰 액수를 다룰때 선택이 아닌 필수로 사용해야 되는걸 기억하자.
- 내부 코드를 보면 계산을 하기 위해 직접 만든 수식들을 사용한다.
- 정수 * 10-scale 로 표현한다.
BigDecimal 의 용어
- unscaled value: 정수를 그대로 표현한다.
- scale: 지수 소수점의 자리수를 표현한다.
- precision: 정수의 자릿수를 표현한다.
BigDecimal 생성하기
- import java.math.*; 를 해줘야지 사용할수 있다.
- unscaledValue
- scale 값을 없앤 정수만 가져온다. - scale
- scale 값을 가져온다. - precision
- 정수의 자릿수를 가져온다.
BigDecimal val = new BigDecimal("123.45");
System.out.println("Unscaled Value: " + val.unscaledValue());
System.out.println("Scale: " + val.scale());
System.out.println("Precision: " + val.precision());
결과
Unscaled Value: 12345
Scale: 2
Precision: 5
BigDecimal 의 연산
- add
- subtract
- multiply
- divide
- remainder
BigDecimal valueA = new BigDecimal("4.4");
BigDecimal valueB = new BigDecimal("2.2");
BigDecimal addValue = valueA.add(valueB);
System.out.println("add: "+addValue);
BigDecimal subtractValue = valueA.subtract(valueB);
System.out.println("subtract: "+subtractValue);
BigDecimal multiplyValue = valueA.multiply(valueB);
System.out.println("multiply: "+multiplyValue);
BigDecimal divideValue = valueA.divide(valueB);
System.out.println("divide: "+divideValue);
BigDecimal remainderValue = valueA.remainder(valueB);
System.out.println("remainder: "+remainderValue);
결과
add: 6.6
subtract: 2.2
multiply: 9.68
divide: 2
remainder: 0.0
BigDecimal의 주의점
- 앞서 double 의 문제 점을 알아봤다
- 그렇다면 BigDecimal double 값을 그대로 넣으면 문제가 된다.
- String 으로 넣거나, double을 String.valueOf을 사용하여 String 으로 변환해 준다.
문제코드
BigDecimal valueA = new BigDecimal(12.1111111111111125);
BigDecimal valueB = new BigDecimal(2);
BigDecimal multiplyValue = valueA.multiply(valueB);
System.out.println(multiplyValue);
결과
24.2222222222222249854439724003896117210388183593750
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] String to LocalDateTime (0) | 2022.02.12 |
---|---|
[Java] Double의 제한사항 (0) | 2021.12.11 |
[Java] Generic Type Erasure (0) | 2021.10.29 |
[Java] HashMap, hashCode(), equals() (0) | 2021.09.06 |
[Java] getter 와 setter (0) | 2021.09.05 |
댓글