Почему String.format может заменить точку на запятую?
Почему String.format может заменить точку на запятую? Представим, что программа сохраняет числовое значение в текстовый файл. Хочется получить 12.50, поэтому пишем: String value = String.format("%.2f", 12.5); Но результат без явной локали зависит от настроек среды, в которой запущена JVM. На одной машине это будет 12.50, на другой 12,50. Для интерфейса пользователя локальные правила полезны, а для машинного формата такой сюрприз может испортить импорт. Разницу легко показать без изменения настроек компьютера: String de = String.format(Locale.GERMANY, "%.2f", 12.5); Здесь получится 12,50. Если строку должен читать другой сервис с точкой в качестве разделителя, укажите нейтральную локаль явно: String stable = String.format(Locale.ROOT, "%.2f", 12.5); Теперь получится 12.50 независимо от локали пользователя. Это важно для логов с фиксированным форматом. Для текста, который читает человек, наоборот, можно передать нужную ему локаль: String label = String.format(userLocale, "%.2f", 12.5); Так отображение будет привычным для пользователя. Но если вы записываете структурированные данные, лучше использовать подходящий формат и библиотеку, например JSON-сериализатор, а не собирать документ через String.format. Java Библиотека | Мы в Телеграм