Scala 打印格式调整小数点
我喜欢打印很多介于-1和1之间的数字,并且需要它们按小数点对齐 我从%2.2f中得到的是:Scala 打印格式调整小数点,scala,format,decimal,Scala,Format,Decimal,我喜欢打印很多介于-1和1之间的数字,并且需要它们按小数点对齐 我从%2.2f中得到的是: val (a, b) = (0.38, -0.38); println (f"${a}%2.2f\n${b}%2.2f ") 0,38 -0,38 我想得到的是: 0,38 -0,38 有优雅的解决方案吗 您实际上可以做的是在格式化之前添加-+: scala> val (a, b) = (0.38, -0.38); println (f"${a}%-+2.2f\n${b}%-+2.2f")
val (a, b) = (0.38, -0.38); println (f"${a}%2.2f\n${b}%2.2f ")
0,38
-0,38
我想得到的是:
0,38
-0,38
有优雅的解决方案吗 您实际上可以做的是在格式化之前添加
-+
:
scala> val (a, b) = (0.38, -0.38); println (f"${a}%-+2.2f\n${b}%-+2.2f")
+0.38
-0.38
a: Double = 0.38
b: Double = -0.38
您将在数字之前获得+
编辑:
如果您知道数字的位数(第一个数字%n.m表示数字的长度),您实际上可以这样做:
scala> printf("%5.2f", a);
0.38
scala> printf("%5.2f", b);
-0.38
实际上,您可以在格式化之前添加
-+
:
scala> val (a, b) = (0.38, -0.38); println (f"${a}%-+2.2f\n${b}%-+2.2f")
+0.38
-0.38
a: Double = 0.38
b: Double = -0.38
您将在数字之前获得+
编辑:
如果您知道数字的位数(第一个数字%n.m表示数字的长度),您实际上可以这样做:
scala> printf("%5.2f", a);
0.38
scala> printf("%5.2f", b);
-0.38
解决方案很简单:第一个数字并不表示点前的数字,而是总数字,如果太短,也不会产生错误消息。所以对于点后面的两个数字,加上点,再加上前面的一个数字和一个可选的减号,我总共需要5个数字,然后它就可以工作了:
val (a, b) = (0.38, -0.38); println (f"${a}%5.2f\n${b}%5.2f ")
0,38
-0,38
不,加号不是一个选项 解决方案很简单:第一个数字并不表示点前的数字,而是总数字,如果太短,也不会产生错误消息。所以对于点后面的两个数字,加上点,再加上前面的一个数字和一个可选的减号,我总共需要5个数字,然后它就可以工作了:
val (a, b) = (0.38, -0.38); println (f"${a}%5.2f\n${b}%5.2f ")
0,38
-0,38
不,加号不是一个选项 虽然已经有一个公认的答案,但我会再添加一个,以供将来参考。Scala
f”“
string interpolator实际使用,在Java文档中可以找到以下标志:
'
'\u0020'要求输出为非负值包含一个额外的空间('\u0020'
)
所以你可能真的想用它。下面是一个显示差异的示例:
val arr = Array(0.38, -0.38, 10.38, -10.38, 123.38, -123.38)
println("Without space:")
arr.foreach(a => println(f"${a}%6.2f"))
println("----------------")
println("With space:")
arr.foreach(a => println(f"${a}% 6.2f"))
它产生以下输出:
Without space:
0,38
-0,38
10,38
-10,38
123,38
-123,38
----------------
With space:
0,38
-0,38
10,38
-10,38
123,38
-123,38
请注意123.38//123.38的不同之处,即对于存在“溢出”的情况,尽管已经有一个可接受的答案,但我将再添加一个以供将来参考。Scala
f”“
string interpolator实际使用,在Java文档中可以找到以下标志:
'
'\u0020'要求输出为非负值包含一个额外的空间('\u0020'
)
所以你可能真的想用它。下面是一个显示差异的示例:
val arr = Array(0.38, -0.38, 10.38, -10.38, 123.38, -123.38)
println("Without space:")
arr.foreach(a => println(f"${a}%6.2f"))
println("----------------")
println("With space:")
arr.foreach(a => println(f"${a}% 6.2f"))
它产生以下输出:
Without space:
0,38
-0,38
10,38
-10,38
123,38
-123,38
----------------
With space:
0,38
-0,38
10,38
-10,38
123,38
-123,38
请注意123.38//123.38的区别,即存在“溢出”的情况下。是的,没错,但不是选项。我从不在前面写加号,我认识的其他人都不会。这个符号不是提高负数的可见性,而是降低负号的重要性。这是违反人体工程学的。是的,我同时发现了我自己。:)是的,没错,但不是一个选择。我从不在前面写加号,我认识的其他人都不会。这个符号不是提高负数的可见性,而是降低负号的重要性。这是违反人体工程学的。是的,我同时发现了我自己。:)