Java와 내용은 일맥 상통합니다! 예제코드는 코틀린 - Gradle - JUnit5를 사용했습니다
BigDecimal을 사용해야 하는 이유
소수점을 저장하는 float과 double은 소수점의 정밀도가 완벽하지 않아 값의 오차가 생길 수 있다.
그 이유는 내부적으로 수를 저장할 때 이진수의 근사치를 저장하기 때문이다.
그렇기 때문에 미세한 숫자의 변동도 허용하지 않는 돈계산과 소수점을 다룬다면 BigDecimal을 사용해야 한다.
BigDecimal은 속도는 느리지만 숫자가 어긋날 가능성을 미연에 방지할 수 있다.
BigDecimal 사용하기
BigDecimal을 사용핼 땐, 문자열을 인자값으로 넘겨줘여 한다.
double을 넘겨주면 double의 이상한 근사치값을 그대로 사용한다.
BigDecimal 비교하기
BigDecimal의 값을 비교할 때는 compareTo 라는 메서드를 사용한다.
CompareTo를 사용하는 AssertJ 메소드를 사용해 비교를 해보았다~
BigDecimal 사칙연산
- 증가 연산자(++) : inc
- 감소 연산자(--) : dec
- 더하기 연산자(+X) : plus
- 빼기 연산자(-X) : minus
- 곱하기 연산자(xX) : times
- 나누기 연산자(/) : div
BigDecimal의 scale(소수점 자리수)과 올림전략을 지정할 수 있다. 기본은 RoundingMode.HALF_EVEN
기본 scale은 피연산자의 scale을 따라간다. 지정하고 싶다면, 연산자를 오버라이딩해서, scale과 올림전략을 선택할 수 있다.
위처럼 scale을 명시할 수 있다.
- 나머지 연산자(%) : rem
- 단항음 연산자(-) : unaryMinus
소숫점 비교 Double VS BigDecimal
저게 같네;;
BigDecimal을 쓰면, 다르다고 나옴
수계산을 근사치로 계산하고 싶지않다면, BigDecimal을 사용하자!
참고 사이트
- https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/java.math.-big-decimal/
- https://jsonobject.tistory.com/466
'생존형 개발' 카테고리의 다른 글
DataGrip Mysqldump Quick Honey Tip (0) | 2021.12.01 |
---|---|
자바 DateTime 역직렬화 실패! (0) | 2021.11.10 |
DDD(DataBase Driven Development) 에서 DD(Domain Driven Development) (0) | 2021.06.02 |
Git Basic - Local Life Cycle (0) | 2021.05.31 |