Силовая точка (".") Как десятичный разделитель в Java - PullRequest
89 голосов
/ 08 марта 2011

В настоящее время я использую следующий код для печати double:

return String.format("%.2f", someDouble);

Это работает хорошо, за исключением того, что Java использует десятичный разделитель моей локали (запятую), в то время как я хотел бы использовать точку.Есть ли простой способ сделать это?

Ответы [ 6 ]

151 голосов
/ 08 марта 2011

Используйте перегрузку String.format, которая позволяет указать языковой стандарт:

return String.format(Locale.ROOT, "%.2f", someDouble);

Если вы только форматируете число - как и выздесь - тогда использование NumberFormat будет, вероятно, более уместным.Но если вам нужны остальные возможности форматирования String.format, это должно работать нормально.

18 голосов
/ 28 марта 2011

Более радикальным решением является установка вашего Locale на раннем этапе в main ().

Как:

Locale.setDefault(new Locale("en", "US"));
10 голосов
/ 08 марта 2011

Вы можете передать дополнительную локаль java.lang.String.format, а также java.io.PrintStream.printf (например, System.out.printf ()):

import java.util.Locale;

public class PrintfLocales {

    public static void main(String args[]) {
        System.out.printf("%.2f: Default locale\n", 3.1415926535);
        System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535);
        System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535);
    }

}

Это приводитв следующем (на моем ПК):

$ java PrintfLocales
3.14: Default locale
3,14: Germany locale
3.14: US locale

См. String.format в Java API.

8 голосов
/ 24 марта 2017

Слишком поздно, но, как уже упоминалось, пример использования NumberFormat (и его подкласс DecimalFormat)

public static String format(double num) {
    DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance();
    decimalSymbols.setDecimalSeparator('.');
    return new DecimalFormat("0.00", decimalSymbols).format(num);
 }
0 голосов
/ 24 июля 2018

У меня была та же проблема .. 55.1 преобразовано в 55,10. Мое быстрое (грязное?) Исправление:

String.format("%.2f", value).replaceAll(",",".");

0 голосов
/ 08 марта 2011

Вы можете использовать NumberFormat и DecimalFormat.

Взгляните на эту ссылку из Java Tutorials LocaleSpecific Форматирование

Раздел под названием Locale-Sensitive Formatting - то, что вам нужно.

...