Scala字符串插值与格式化,如何更改语言环境?

14

在瑞典进行格式字符串插值时,创建包含小数的字符串时会得到逗号而不是点:

scala> val a = 5.010
a: Double = 5.01

scala> val a = 5.0101
a: Double = 5.0101

scala> f"$a%.2f"
res0: String = 5,01
我的问题是如何设置格式,以便我获得结果5.01?我想能够仅为该字符串设置区域设置,即不更改整个环境的区域设置。
谢谢, Johan
2个回答

18

使用相同的Java库数字格式支持,可以从StringOps增强的String类访问,您可以为该输出指定另一个语言环境:

"%.2f".formatLocal(java.util.Locale.US, a)

(如 "如何将整数转换为给定长度的带前导零的字符串? "所述)
Scala 的方法是使用 string f interpolator(Scala 2.10+),就像 OP 的问题中所示,但它使用“当前区域设置”,没有提供一种简单的方法来设置该区域设置为不同的区域设置,仅供一个调用。

应该是 a,而不是 $a - frostmatthew
谢谢,还有其他方法吗?我的意思是仍然使用Scala的好方法而不是Java的方式?干杯,否则我就接受你了。 - Johan S

4
Locale.setDefault(Locale.US)
println(f"$a%.2f")

2
感谢提供这段代码片段,它可能会提供一些有限的、立即的帮助。一个适当的解释将极大地提高它的长期价值,因为它展示了为什么这是一个好的解决方案,并使它更有用于未来读者的其他类似问题。请[编辑]您的答案以添加一些解释,包括您所做的假设。 - shkaper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接