Как указать десятичный разделитель - PullRequest
0 голосов
/ 31 января 2012

У меня довольно простая проблема.Я получаю ввод действительного числа, например 6.03, но это дает мне ошибки.Если я изменю это на 6,03, это нормально.Однако я не могу изменить ввод, который мне нужно обработать, так как я могу сказать Java использовать . в качестве разделителя вместо ,?

Scanner sc = new Scanner(System.in);
double gX = sc.nextDouble(); // Getting errors

Спасибо

Ответы [ 3 ]

4 голосов
/ 31 января 2012

Scanner может быть предоставлено с Locale для использования, вам нужно указать Locale, который использует . в качестве десятичного разделителя:

Scanner sc = new Scanner(System.in).useLocale(Locale.ENGLISH); 
1 голос
/ 31 января 2012

Взято непосредственно из руководства.

Чувствительное к локали форматирование

В предыдущем примере был создан объект DecimalFormat для локали по умолчанию.Если вам нужен объект DecimalFormat для ненулевого Locale, вы создаете экземпляр NumberFormat, а затем приводите его к DecimalFormat.Вот пример:

NumberFormat nf = NumberFormat.getNumberInstance(loc);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern(pattern);
String output = df.format(value);
System.out.println(pattern + " " + output + " " + 
                   loc.toString());

Выполнение предыдущего примера кода приводит к следующему выводу.Отформатированное число, которое находится во втором столбце, зависит от локали:

###,###.###      123,456.789     en_US
###,###.###      123.456,789     de_DE
###,###.###      123 456,789     fr_FR
1 голос
/ 31 января 2012

Возможно, вы столкнулись с проблемами локали. Вы можете использовать java.text.NumberFormat для анализа.

NumberFormat format = NumberFormat.getInstance(Locale.US);
Number number = format.parse("6.03");
double d = number.doubleValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...