Я пытаюсь составить форматированную строку, которая должна выглядеть так:
Бутылка водки стоит 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 рубля.
Это понятно (форматтер Java, используемый интерполятором f, применяет десятичный разделитель для конкретной локали, как указано здесь), но я все же хочу использовать десятичную точку вместо запятой.
Мне известен возможный обходной путь — использование метода formatLocal()
с явно установленной локалью:
val str = "A bottle of vodka costs %.2f rubles.".formatLocal(java.util.Locale.US, cost)
но это не кажется мне особенно Скалаевским способом делать вещи.
Итак, мой вопрос таков: возможно ли отформатировать строку с определенным десятичным разделителем, используя только интерполяцию f без каких-либо посторонних вызовов методов?
f
использует текущую локаль , не предлагая простого способа изменить этот язык всего за один вызов. - person Wiktor Stribiżew   schedule 07.09.2016