"%.3f".format(1)
は1.000
を返します。
"%.3f".format(4.0/3.0)
は1.333
を返します。スカラーでの文字列フォーマット - 最大10進精度
これらの返信を行う簡単な方法はありますか1
と1.333
?私は、標準printf
のフォーマットはその精度を既に最大値として指定していましたが、明らかにScalaではそうではないと考えました。
"%.3f".format(1)
は1.000
を返します。
"%.3f".format(4.0/3.0)
は1.333
を返します。スカラーでの文字列フォーマット - 最大10進精度
これらの返信を行う簡単な方法はありますか1
と1.333
?私は、標準printf
のフォーマットはその精度を既に最大値として指定していましたが、明らかにScalaではそうではないと考えました。
printf関数で使用されるデフォルトのフォーマッタは[DecimalFormat][1]
よりも、すべて同じサポートを持っていない一般的なもののようです。あなたはこれらの線に沿ってカスタムフォーマッタをインスタンス化することができます
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
参照:詳細については、http://docs.oracle.com/javase/tutorial/java/data/numberformat.htmlを。
"%.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'を返します。 –