Почему формат двойной печати Java отличается в зависимости от использования String.format или нет - PullRequest
2 голосов
/ 13 апреля 2010

Этот код:

 System.out.println(String.format("%f", Math.PI));
 System.out.println(Math.PI);

выдает результат на моем компьютере:

3,141593
3.141592653589793

Почему первая строка печатает число с плавающей запятой, а вторая - точку?

Ответы [ 4 ]

4 голосов
/ 13 апреля 2010

String.format(String, Object...) использует правила форматирования Locale.getDefault(). String.valueOf(double) нет. Используйте String.format(Locale, String, Object...), чтобы явно указать используемый языковой стандарт.

2 голосов
/ 13 апреля 2010

Первый учитывает ваши настройки локали (которые, кажется, используют запятую для разделителя тысяч).

0 голосов
/ 13 апреля 2010

String.format () использует локаль вашей системы. Также должен быть вариант этого метода, вы можете передать конкретный экземпляр Locale. При использовании println (), с другой стороны, вызывается метод объекта toString () - в вашем случае Double # toString (), который в большинстве случаев является довольно простой реализацией, достаточно хорош, чтобы представить понятное отображение объекта.

0 голосов
/ 13 апреля 2010

Первый использует локаль по умолчанию .

second , вероятно, использует реализацию по умолчанию (не локализуемую).

...