如何用 $ 字符右对齐
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"
分两步完成:
- 用两位数字和一个美元符号格式化数字
- 格式化生成的字符串,使其右对齐,总宽度为 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
我希望这是一个玩笑应用程序 - 你不会真的使用 double
s 来计算真钱,是吗?
我正在尝试用美元符号右对齐一个值(浮点数)。但我证明的是价值而不是美元符号。那么我怎样才能证明美元符号的合理性。
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"
分两步完成:
- 用两位数字和一个美元符号格式化数字
- 格式化生成的字符串,使其右对齐,总宽度为 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
我希望这是一个玩笑应用程序 - 你不会真的使用 double
s 来计算真钱,是吗?