如何用 $ 字符右对齐

how to right justify with $ character

我正在尝试用美元符号右对齐一个值(浮点数)。但我证明的是价值而不是美元符号。那么我怎样才能证明美元符号的合理性。

println(f"$$${10.5340}%40.2f")
$                                   10.53

谢谢

如果任何数字的小数位对齐很重要(即填充,以便小数点从左边开始 40 个字符,而不用 40 个字符填充,无论位数如何),我看不出这是怎么回事可以直接使用 Scala 的格式化程序完成 - 但它可以在 Java 的 DecimalFormat:

的帮助下实现
scala> import java.text._;
import java.text._

scala> println(f"${new DecimalFormat("$###.##").format(10.5340)}%40s")
                              .53

scala> println(f"${new DecimalFormat("$###.##").format(1000.5340)}%40s")
                            00.53

代码:

println(f"${"$"}%40s${10.5340}%.2f")

输出:

.53

试试这个:

printf("%40c%.2f%n", '$', 10.5340)

这是在 java.text.NumberFormat.getCurrencyInstance 上使用字符串插值的一种方法:

import java.text.NumberFormat.getCurrencyInstance

val amount1 = f"${getCurrencyInstance.format(10.5340)}%40s"
val amount2 = f"${getCurrencyInstance.format(100.5340)}%40s"
val amount3 = f"${getCurrencyInstance.format(1000.5340)}%40s"

// amount1: String = "                                  .53"
// amount2: String = "                                 0.53"
// amount3: String = "                               ,000.53"

如果它是其他国家/地区的货币,例如法国:

import java.util.{Currency, Locale}

val currInstance = getCurrencyInstance

currInstance.setCurrency( Currency.getInstance(new Locale("fr", "FR")) )

val amount4 = f"${currInstance.format(123.456)}%40s"
// amount4: String = "                               EUR123.46"

分两步完成:

  1. 用两位数字和一个美元符号格式化数字
  2. 格式化生成的字符串,使其右对齐,总宽度为 43 (40 + 1 + 2) 个字符

类似的东西:

println(f"${f"$$${10.5340}%.2f"}%43s")

结果(总宽度与数量10.5340无关):

                                     .53

具有许多不同数字的示例:

for (n <- List(1234.567, 0.33, 1.0, 42.0, 45.2)) {
  println(f"${f"$$${n}%.2f"}%43s")
}

结果:

                                   34.57
                                      [=13=].33
                                      .00
                                     .00
                                     .20

我希望这是一个玩笑应用程序 - 你不会真的使用 doubles 来计算真钱,是吗?