"%.3f".format(1)
返回1.000
。
"%.3f".format(4.0/3.0)
返回1.333
。scala中的字符串格式 - 最大小數精度
有沒有一些簡單的方法來獲得這些回報1
和1.333
?我認爲標準printf
格式指定的精度已達到最大值,但顯然不在Scala中。
"%.3f".format(1)
返回1.000
。
"%.3f".format(4.0/3.0)
返回1.333
。scala中的字符串格式 - 最大小數精度
有沒有一些簡單的方法來獲得這些回報1
和1.333
?我認爲標準printf
格式指定的精度已達到最大值,但顯然不在Scala中。
通過使用printf的默認格式似乎是一個通用的一個不具有全部超過[DecimalFormat][1]
同樣的支持。有關更多信息,http://docs.oracle.com/javase/tutorial/java/data/numberformat.html:您可以沿着這些線路實例化自定義格式:
scala> import java.text.DecimalFormat
import java.text.DecimalFormat
scala> val formatter = new DecimalFormat("#.###")
formatter: java.text.DecimalFormat = [email protected]
scala> formatter.format(1)
res36: java.lang.String = 1
scala> formatter.format(1.34)
res37: java.lang.String = 1.34
scala> formatter.format(4.toFloat/3)
res38: java.lang.String = 1.333
scala> formatter.format(1.toFloat)
res39: java.lang.String = 1
見。
"%.3f".format(1)
將拋出一個java.util.IllegalFormatConversionException
由於錯誤的類型(Float
預計和你給Int
)。
即使您使用"%.3f".format(1.0)
,您也會得到1.000
。
可以使用的方法類似下面,以獲得預期的結果:
def format(x:AnyVal):String = x match {
case x:Int => "%d".format(x)
case x:Long => "%d".format(x)
case x:Float => "%.3f".format(x)
case x:Double => "%.3f".format(x)
case _ => ""
}
此方法將返回基於參數類型預期的格式。
這對1.0f仍然返回「1.000」 –
如何在格式化後簡單地刪除零?
scala> Array(1.0,1.10,1.110).map("%.3g" format _).map(_.replaceAll("[.0]*$",""))
res7: Array[java.lang.String] = Array(1, 1.1, 1.11)
小心這個,因爲它使用區域設置來選擇要用作小數點。它可能是','而不是''。 – Heptic
Scala只是使用普通的Java格式,所以這個問題並不是Scala特有的。有關格式化字符串的完整說明,請參閱http://download.oracle.com/javase/7/docs/api/java/util/Formatter.html。 –
'「%.3f」.format(1)'不返回1.000,但失敗。 '「%.3f」.format(1.0)'或1f是必需的。否則你得到一個'java.util.IllegalFormatConversionException:f!= java.lang.Integer' –