덧셈 연산을 구현하는 중 입력값을 Double로 형변환하여 연산을 진행하였다. 연산 결과가 원하는 대로 곧 잘 나왔지만 0.1 + 0.2
를 했을 때 0.30000000000000004
라는 결과가 나왔다. 소수점을 다룰 때 부동소수점 오류로 인해 소수점이 제대로 표현되지 않는 문제가 발생하며 이런 문제를 예방하고자 BigDecimal
을 사용한다고 한다. 오늘은 BigDecimal
에 대해 정리 해보겠다.
val num1: Double = 0.1
val num2: Double = 0.2
println(num1 AbstractIterator num2) // 0.30000000000000004
val bigDecimal1 = BigDecimal("100.125") // 문자열로 넘겨줌
println(bigDecimal1)
val bigDecimal2 = BigDecimal.valueOf(100.125) // 숫자로 넘겨줌
println(bigDecimal2)
0.1 + 0.2
연산을 했을 때 double형에서는 0.30000000000000004
라는 결과를 얻었는데 BigDecimal을 사용하니 0.3
이라는 올바른 결과가 나오는 것을 확인했다. val decimal1 = BigDecimal("0.1")
val decimal2 = BigDecimal("0.2")
println(decimal1 + decimal2) // 0.3
val double1: Double = 0.1
val double2: Double = 0.2
println(double1 + double2) // 0.30000000000000004
val decimal1 = BigDecimal("100.15")
val decimal2 = BigDecimal("10.5")
// 덧셈 연산
println(decimal1 + decimal2)
println(decimal1.plus(decimal2))
// 뺄셈 연산
println(decimal1 - decimal2)
println(decimal1.minus(decimal2))
// 곱셈 연산
println(decimal1 * decimal2)
println(decimal1.times(decimal2))
// 나눗셈 연산
println(decimal1 / decimal2)
println(decimal1.div(decimal2))
// 나머지 연산
println(decimal1 % decimal2)
println(decimal1.rem(decimal2))
decimal1.compareTo(decimal2)
기준 decimal1이 크면 1을 반환하고 작으면 -1을 반환한다. decimal2과 같을 경우에는 0을 반환한다. val decimal1 = BigDecimal("100.15")
val decimal2 = BigDecimal("10.5")
val compare = decimal1.compareTo(decimal2)
println(compare) // decimal1이 크면 1 같으면 0 작으면 -1