在 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
)。
我正在尝试编写一个格式化字符串,应该如下所示:
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
)。