Ваш Scanner
, вероятно, использует Denmark
Locale
, поскольку он использует ,
для форматирования двойных переменных вместо значений по умолчанию для США .
.
Вот как это можно проверить (Iпопытался локально заставить мой сканер использовать локаль Дании, и он ведет себя так же, как в ваших экспериментах):
Scanner sc = new Scanner(System.in);
System.out.println(sc.locale().getDisplayCountry());
Если это ваш случай, вам нужно настроить его на использование US Locale
или любого другогодругое, что вы хотите:
Scanner sc = new Scanner(System.in);
sc.useLocale(Locale.US);
System.out.println(sc.locale().getDisplayCountry());
В качестве альтернативы, если вам нужно принять и ,
, и .
, вы можете просто использовать форматтер.Вот один пример с NumberFormat
, использующим France
в качестве локали, который правильно форматирует ,
и .
:
NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE);
double doubleComma = numberFormat.parse("5,0").doubleValue();
double doubleDot = numberFormat.parse("5.0").doubleValue();
В вашем коде вы должны сделать что-то вроде:
public static void main (String[] args) {
try{
Scanner sc = new Scanner(System.in);
NumberFormat numberFormat = NumberFormat.getInstance(Locale.FRANCE);
double n = numberFormat.parse(sc.next()).doubleValue();
System.out.println(n);
} catch (ParseException e) {
e.printStackTrace();
}
}