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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Как

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

Ответ 3

Вы можете передать дополнительный язык в 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.

Ответ 4

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

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