1

Is there a simple way of printing a floating value as a string with decimals if the value has decimals, other wise print it like an int without decimals?

12.5 would print 12.50
15.0 would print 15

Is there a simple way to do this? I can think of ways which includes parse floats to strings to ints but it doesn't seem optimal.

EDIT: This answer does not do what I want: Show decimal of a double only when needed

This answers only shows one decimal if the value only has one decimal. What I need is two decimals, or nothing.

Adam Millerchip
  • 20,844
  • 5
  • 51
  • 74
just_user
  • 11,769
  • 19
  • 90
  • 135
  • 2
    Does this answer your question? [Show decimal of a double only when needed](https://stackoverflow.com/questions/11826439/show-decimal-of-a-double-only-when-needed) – Milgo Sep 28 '20 at 12:57
  • The way I know (the old way) was using DecimalFormat. I believe there's a newer way to do it using printf – ControlAltDel Sep 28 '20 at 12:57
  • @Milgo, I was a little quick to respond. No, its close to what I need. If the value has one decimal it should display two decimals. This way shows only one. – just_user Sep 29 '20 at 07:44
  • Then you should go for [Java Currency Number format](https://stackoverflow.com/questions/2379221/java-currency-number-format). – Milgo Sep 29 '20 at 08:34

1 Answers1

3

You can use String.format(), and strip off the decimal if it's .00 with removeSuffix():

fun Double.toMyFormat(): String =
    String.format("%.2f", this).removeSuffix(".00")

fun main() {
    println(12.5.toMyFormat())
    println(15.0.toMyFormat())
}

Prints:

12.50
15

This also works with rounded numbers such as 12.999 etc.

Adam Millerchip
  • 20,844
  • 5
  • 51
  • 74