Точка силы (".") как десятичный разделитель в java


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

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

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

6 83

6 ответов:

используйте перегрузку String.format что позволяет указать локаль:

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

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

более радикальным решением является установка локали в начале main().

Как:

Locale.setDefault(new Locale("en", "US"));

вы можете передать дополнительную Локаль на java.ленг.Строка.формат, а также java.io.PrintStream.printf (например, System.из.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

посмотреть строку.формат в Java API.

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

public static String format(double num) {
    DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance();
    decimalSymbols.setDecimalSeparator('.');
    return new DecimalFormat("0.00", decimalSymbols).format(num);
 }

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

взгляните на эту ссылку из учебников Java Локальное Форматирование

раздел под названием Locale-чувствительное форматирование - это то, что вам нужно.

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

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