在 Scala 中使用 f 字符串插值器强制指定小数点分隔符

Force specific decimal separator using the f string interpolator in Scala

我正在尝试编写一个格式化字符串,应该如下所示:

A bottle of vodka costs x.yz rubles.

其中 x.yz 是四舍五入到 2 个小数点的任意 Double 值。

为此,我使用带有 printf 语法的字符串插值:

val cost = 2.56
val str = f"A bottle of vodka costs $cost%.2f rubles."

不幸的是,在具有俄语语言环境的机器上,上面的代码片段产生的结果与我想要实现的结果有点不同:

str: String = A bottle of vodka costs 2,56 rubles.

这是可以理解的(f 插值器使用的 Java 格式化程序应用特定于语言环境的小数点分隔符,如 here 所述),但我仍然想使用小数点而不是逗号。

我知道一个可能的解决方法 – 使用 formatLocal() 方法并显式设置语言环境:

 val str = "A bottle of vodka costs %.2f  rubles.".formatLocal(java.util.Locale.US, cost)

但我并不觉得它是一种特别 Scalaesque 的做事方式。

所以我的问题是:是否可以仅使用 f 插值来格式化具有特定小数点分隔符的字符串,而无需任何无关的方法调用?

目前 f 插值器不支持区域设置或自定义分隔符(请参阅 macro_StringInterpolation_f.scala / FastTrack.scala)。