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

时间:2016-09-07 10:51:29

标签: string scala string-interpolation scala-2.11

我正在尝试编写一个看起来像这样的格式化字符串:

  

一瓶伏特加花费x.yz卢布。

其中x.yz是一个任意的Double值,舍入为2个小数符号。

为实现这一目标,我使用字符串插值和printf语法:

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

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

  

str:String =一瓶伏特加的费用 2,56 卢布。

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

我知道可能的解决方法 - 使用formatLocal()方法显式设置区域设置:

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

但它并没有让我觉得这是一种特别的Scalaesque做事方式。

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

1 个答案:

答案 0 :(得分:3)

目前f插补器不支持语言环境或自定义分隔符(请参阅macro_StringInterpolation_f.scala / FastTrack.scala)。