Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 打印格式调整小数点_Scala_Format_Decimal - Fatal编程技术网

Scala 打印格式调整小数点

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")

我喜欢打印很多介于-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")
+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的区别,即存在“溢出”的情况下。

是的,没错,但不是选项。我从不在前面写加号,我认识的其他人都不会。这个符号不是提高负数的可见性,而是降低负号的重要性。这是违反人体工程学的。是的,我同时发现了我自己。:)是的,没错,但不是一个选择。我从不在前面写加号,我认识的其他人都不会。这个符号不是提高负数的可见性,而是降低负号的重要性。这是违反人体工程学的。是的,我同时发现了我自己。:)