Number formatting in Scala?

前端 未结 7 2135
夕颜
夕颜 2021-02-18 23:09

I have a dynamically changing input reading from a file. The numbers are either Int or Double. Why does Scala print .0 after every D

7条回答
  •  渐次进展
    2021-02-18 23:16

    The use of a "_.0" at the end of floating point numbers is a convention. Just a way to know that the number is actually floating point and not an integer.

    If you really need to "to print it the same way it reads it" you may have to rethink the way your code is structured, possibly preserving your input data. If it's just a formatting issue, the easiest way is to convert the values to integers before printing:

    val x = 1.0
    println(x.toInt)
    

    If some are integers and some are not, you need a bit more code:

    def fmt[T <% math.ScalaNumericConversions](n : T) = 
                        if(n.toInt == n) n.toInt.toString else n.toString
    
    val a : Double = 1.0
    val b : Double = 1.5
    val c : Int = 1
    
    println(fmt(a))
    println(fmt(b))
    println(fmt(c))
    

    The code above should print:

    1
    1.5
    1
    

    The signature of the fmt method accepts any type that either is a subtype of ScalaNumericConversions or can be converted to one through implicit conversions (so we can use the toInt method).

提交回复
热议问题