scala中的字符串格式 - 最大小数精度

Ben*_*lts 15 scala

"%.3f".format(1)回报1.000.
"%.3f".format(4.0/3.0)回报1.333.

有一些简单的方法来拥有这些回报11.333?我认为标准printf格式已经将精度指定为最大值,但显然不在Scala中.

huy*_*hjl 26

printf使用的默认格式化程序似乎是一个普通的格式化程序,它没有所有相同的支持[DecimalFormat][1].您可以沿着这些行实例化自定义格式化程序:

scala> import java.text.DecimalFormat 
import java.text.DecimalFormat

scala> val formatter = new DecimalFormat("#.###")
formatter: java.text.DecimalFormat = java.text.DecimalFormat@674dc

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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:http://docs.oracle.com/javase/tutorial/java/data/numberformat.html.


Dav*_*vid 7

"%.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 _ => ""
}
Run Code Online (Sandbox Code Playgroud)

此方法将根据参数类型返回预期的格式.

  • 对于1.0f,这仍然返回"1.000" (2认同)