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);
}
Ответ 5
Вы можете использовать NumberFormat и DecimalFormat.
Взгляните на эту ссылку из Java Tutorials Локальное специфическое форматирование
Раздел под названием Locale-Sensitive Formatting - это то, что вам нужно.