Scala浮点插值格式规范?

时间:2018-03-17 12:01:33

标签: scala floating-point

我一直在使用Scala的浮点插值功能,但我无法完全理解它的规则。任何人都可以了解格式的不同组成部分吗?

println(f"${1234.5678}%1.2f") // prints 1234.57
println(f"${1234.5678}%1.5f") // prints 1234.56780
println(f"${1234.5678}%09.2f") // prints 001234.57
println(f"${1234.5678}%9.2f") // prints "  1234.57"

例如,是否可以使用除' '0以外的任何其他字符来填充字符串?是否有可能在舍入到只是截取小数位而不是像实际上在上面的例子中那样舍入它们?

由于

2 个答案:

答案 0 :(得分:1)

Afaik,scala Num,Num2 1,1 2,2 3,3 4,4 使用java f格式化程序。

如果你看System.out.printf,你可以看到如下内容:

src.zip!\java\util\Formatter.java

在这里你可以看到上面的符号支持,无法定制你自己的,仅供参考。

答案 1 :(得分:0)

println (f"${1234.5678}%1.2f") // prints 1234.57

小数点后2位。 1总共太少,显示整数,至少有4 +点+ 2 =数字

println (f"${1234.5678}%1.5f") // prints 1234.56780

如上所述:总共1个太少了。实际上4 +点+5 = 10

println (f"${1234.5678}%09.2f") // prints 001234.57

总共9个,填充零,2个分隔符。

println (f"${1234.5678}%9.2f") // prints "  1234.57"

总共9个,填充空格,2个分隔符。

所以数字%T.Rf是总宽度= T,小数位数是R.但如果数字不合适,则会牺牲布局的正确性。更好的是你知道支付多少,cpu有多热或者数字显示的是什么--JVM不知道。因此T应始终大于R(分隔符为+ 1)。