Scala Строковая интерполяция с помощью формата, как изменить язык?

При выполнении интерполяции строк форматирования в Швеции я получаю запятую вместо точки при создании строк с десятичными числами:

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? Я хотел бы иметь возможность устанавливать локаль только для этой строки, т.е. Чтобы я не менял локаль для всей среды.

Приветствия,

Йохан

Ответ 1

Используя ту же Поддержка форматирования номера библиотеки Java из StringOps обогащенный класс строк, вы можете указать другой язык только для этого вывода:

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

(как описано в Как преобразовать Int в строку с заданной длиной с ведущими нулями для выравнивания?")

Scala будет использовать string f interpolator (Scala 2.10+), как в вопросе OP, но он использует "текущую локаль", не предлагая простой способ установить эту локаль на другую для одного вызова.

Ответ 2

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