如何用$字符对正

时间:2018-08-07 19:25:00

标签: string scala interpolation

我正在尝试用美元符号对一个值(浮点数)进行纠正。但是我说的是价值而不是美元符号。那么我该如何证明美元符号的合理性。

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

谢谢

5 个答案:

答案 0 :(得分:1)

这是在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 = "                                  $10.53"
// amount2: String = "                                 $100.53"
// amount3: String = "                               $1,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 :(得分:1)

分两步进行:

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

类似的东西:

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

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

                                     $10.53

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

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

结果:

                                   $1234.57
                                      $0.33
                                      $1.00
                                     $42.00
                                     $45.20

我希望这是一个玩笑的应用程序-您不是真的在使用double s来计算真钱吗?

答案 2 :(得分:0)

如果重要的是小数位应与任何数字对齐(例如,填充以使小数点从左边开始是40个字符,而不是填充40个字符(无论数字位数)),我看不出这是怎么回事直接通过Scala的格式化程序完成-但是可以借助Java的DecimalFormat实现:

scala> import java.text._;
import java.text._

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

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

答案 3 :(得分:0)

代码:

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

输出:

  

10.53美元

答案 4 :(得分:0)

尝试一下:

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