본문 바로가기

생존형 개발

숫자계산은 BigDecimal로 하라구욧! feat. Kotlin

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/

 

java.math.BigDecimal - Kotlin Programming Language

 

kotlinlang.org

- https://jsonobject.tistory.com/466

 

Java, BigDecimal 사용법 정리

BigDecimal? BigDecimal은 Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법이다. 소수점을 저장할 수 있는 가장 크기가 큰 타입인 double은 소수점의 정밀도에 있어 한계가 있어 값이

jsonobject.tistory.com