具有可变小数精度的双精度格式

Format double with variable decimal precision

我知道在 Scala.js 中(不能使用 java.text.DecimalFormat)我可以这样写:

val number = 1.2345
println(f"$x%.2f") // "1.23"

然而,这似乎不起作用:

val decimalPlaces = 2
println(f"$x%.${decimalPlaces}f")
// [error] Missing conversion operator in '%'; use %% for literal %, %n for newline      f"$x%.${decimalPlaces}f"

// also doesn't work: (f"$x%." + decimalPlaces + "f").toFloat

如何实现可变小数精度?

这个有效

val number = 1.2345
val decimalPlaces = 2
println(("%." + decimalPlaces + "f").format(number))

format 隐式调用了 StringLike

我想它不起作用的原因是表达式中没有任何地方:

    s"$number%.$decimalPlacesf" # DOESN'T WORK

我们正在提供如何解决变量的顺序。

你需要人为强制执行。类似于@nattyddubbs 的回答:

val number = 1.2345
val decimalPlaces = 3

val format = s"%.${decimalPlaces}f"
println(format.format(number)) # 1.235