f interpolation doesn't reduce the number of digits in scala

Viewed 61

Usecase:

length of number > 5 => return first 5 digits.

length of number = 5 => return the number as is.

length of number < 5 => add leading zeros to the number.

number is -ve => return 00000

My Code:

object ScalaCodes {
  def main(args: Array[String]): Unit = {
    println(intToString(123))
    println(intToString(1))
    println(intToString(12345))
    println(intToString(123456789))
    println(intToString(0))
    println(intToString(-10))
  }
  def intToString(i:Int): String = {
    if(i < 0)
      "0"*5
    else
      f"$i%05d"
  } 
}

The output is:

00123
00001
12345
123456789
00000
00000

Why is 123456789 not reducing to 5 digits.

Any help is appreciated.

1 Answers

For the "first 5 digits" try:

if (i > 99999) f"$i%.5s"

Or a simple one-liner. No if...else if... required.

f"${i max 0}%05d".take(5)
Related