Этот код:
System.out.println(String.format("%f", Math.PI)); System.out.println(Math.PI);
выдает результат на моем компьютере:
3,141593 3.141592653589793
Почему первая строка печатает число с плавающей запятой, а вторая - точку?
String.format(String, Object...) использует правила форматирования Locale.getDefault(). String.valueOf(double) нет. Используйте String.format(Locale, String, Object...), чтобы явно указать используемый языковой стандарт.
String.format(String, Object...)
Locale.getDefault()
String.valueOf(double)
String.format(Locale, String, Object...)
Первый учитывает ваши настройки локали (которые, кажется, используют запятую для разделителя тысяч).
String.format () использует локаль вашей системы. Также должен быть вариант этого метода, вы можете передать конкретный экземпляр Locale. При использовании println (), с другой стороны, вызывается метод объекта toString () - в вашем случае Double # toString (), который в большинстве случаев является довольно простой реализацией, достаточно хорош, чтобы представить понятное отображение объекта.
Первый использует локаль по умолчанию .
second , вероятно, использует реализацию по умолчанию (не локализуемую).