본문 바로가기
안드로이드/코틀린

안드로이드 소수점 표기 올림? 버림? : String.format, DecimalFormat

by 시작이반의반 2024. 5. 10.

안드로이드 소수점 표기
String.format / DecimalFormat

길게 나열된 소수점이 있을 때 종종 둘째 자리 또는 셋째 자리까지만 소수점을 표기해야 할 때가 있습니다.

이번 글에서는 코틀린에서 소수점 표기하는 방법으로 String.format / DecimalFormat을 정리하려고 합니다.

또한 소수점을 표기할 때 올림, 반올림, 버림은 어떻게 적용되는지 살펴보려고 합니다.

 

 

 

 

 

소수점 표기방법 : String.format

 

String.format을 사용해서 원하는 소수점까지 표기하는 방법은 아래와 같습니다.

String.format("%.2f", floatValue) // 소수점 둘째 자리까지 표기

 

String.format("%.3f", floatValue) // 소수점 셋째자리까지 표기

 

 

아주 심플하게 사용이 가능한데요, 한 가지 주의사항이 있어요.

String.format으로 소수점을 표기했을 경우 반올림이 이루어집니다!

아래 결과처럼 말이죠.

val floatValue1 = 10.666666f
val floatValue2 = 10.555555f
val floatValue3 = 10.444444f

println("floatValue1 = " + String.format("%.2f", floatValue1)) // "floatValue1 = 10.67"
println("floatValue2 = " + String.format("%.2f", floatValue2)) // "floatValue2 = 10.56"
println("floatValue3 = " + String.format("%.2f", floatValue3)) // "floatValue3 = 10.44"

 

 

필자는 단순하게 소수점을 자르는 개념이라고 생각해서 버림이라고 생각했는데... 그렇지 않네요

숫자를 표기할 때 올림, 반올림, 버림이 어떻게 적용되는지는 굉장히 중요한 요소가 될 수 있어요.

String.format에서는 반올림 외에는 올림이나 버림을 직접적으로 제어할 수 있는 옵션은 제공되지 않는다고 합니다.

String format으로 소수점을 표기할 때 이를 인지한다면 좋을 것 같습니다.

 

 

 

소수점 표기방법 : DecimalFormat

 

DecimalFormat을 사용해서 원하는 소수점까지 표기하는 방법은 아래와 같습니다.

val decimalFormat = DecimalFormat("#.##") // 소수점 둘째 자리까지 표기
println("floatValue = " + decimalFormat.format(floatValue))

 

val decimalFormat = DecimalFormat("#.###") // 소수점 셋째 자리까지 표기
println("floatValue = " + decimalFormat.format(floatValue))

 

 

DecimalFormat은 어떨까요?

String.format과 마찬가지로 DecimalFormat도 기본적으로 반올림이 적용됩니다.

근데 String.format과 달리 DecimalFormat은 올림, 반올림, 버림과 같은 방식을 직접 제어할 수 있습니다!

아래 결과처럼 말이죠.

val floatValue1 = 10.666666f
val floatValue2 = 10.555555f
val floatValue3 = 10.444444f

val decimalFormat = DecimalFormat("#.##").apply {
    roundingMode = RoundingMode.DOWN // 버림
}
println("floatValue1 = " + decimalFormat.format(floatValue1)) // "floatValue1 = 10.66"
println("floatValue2 = " + decimalFormat.format(floatValue2)) // "floatValue2 = 10.55"
println("floatValue3 = " + decimalFormat.format(floatValue3)) // "floatValue3 = 10.44"

 

 

DecimalFormat에서 소수점 이하 자릿수를 처리하는 방법으로 RoundingMode가 사용됩니다.

이렇게 특정 소수점 자릿수에 대한 올림, 버림을 제어해야 한다면 DecimalFormat을 활용하면 좋을 것 같습니다.

끝으로 RoundingMode에 어떤 종류가 있는지 간략하게 정리하고 마무리하겠습니다.

 

 

 

 

 

DecimalFormat RoundingMode

 

  • RoundingMode.UP : 항상 올림

    입력 결과
    1.1 2
    -1.1 -2
  • RoundingMode.DOWN : 항상 내림

    입력 결과
    1.6 1
    -1.6 -1
  • RoundingMode.CEILING : 양수는 UP, 음수는 DOWN 처리

    입력 결과
    1.1 2
    -1.6 -1
  • RoundingMode.FLOOR : 양수는 DOWN, 음수는 UP 처리

    입력 결과
    1.6 1
    -1.1 -2

댓글