scala> "%1.0f" format 1.0
res3: String = 1
Se il vostro ingresso è sia Int
o Double
, si può fare in questo modo:
def fmt(v: Any): String = v match {
case d : Double => "%1.0f" format d
case i : Int => i.toString
case _ => throw new IllegalArgumentException
}
Usage:
scala> fmt(1.0)
res6: String = 1
scala> fmt(1)
res7: String = 1
scala> fmt(1.0f)
java.lang.IllegalArgumentException
at .fmt(<console>:7)
at .<init>(<console>:6)
at .<clinit>(<console>)
at RequestResult$.<init>(<console>:4)
at RequestResult$.<clinit>(<console>)
at RequestResult$result(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.Dele...
In caso contrario, si potrebbe utilizzare BigDecimals
. Sono lenti, ma lo fanno venire con la scala, così "1", "1,0" e "1,00" sono tutti diversi:
scala> var x = BigDecimal("1.0")
x: BigDecimal = 1.0
scala> x = 1
x: BigDecimal = 1
scala> x = 1.0
x: BigDecimal = 1.0
scala> x = 1.000
x: BigDecimal = 1.0
scala> x = "1.000"
x: BigDecimal = 1.000
fonte
2009-08-29 14:08:44
Grazie per si risponde Ma il problema è che il numero è sconosciuto, o è '1' o '1.0'. Se '1' voglio stampare '1', se è '1.0', allora voglio stampare '1.0'. Ma poiché è doppio, Scala stampa sempre come "1.0" –
Se lo desideri, dovrai archiviarlo come stringa. Un 'double' non ricorda se lo hai assegnato o meno con' 1' o '1.0'. – cdmckay
Kodo, i numeri non hanno intrinsecamente un numero di cifre. Non c'è differenza tra un numero che ha il valore 1 e un numero che ha il valore 1.0. – Jesper