"%.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' –