2016-11-21 8 views
0

Мне нужно ввести номер в виде строки из пользователя и проанализировать ее на объект Double.Как разобрать String с разделителями как десятичными разделителями, так и точкой, чтобы удвоить

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

Пример: 22,33 -> 22,33 и 22,33 -> 22,33

Что я использую:

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); 
     try { 
      Number number = format.parse(formDto.getWeight()); 
      kitten.setWeight(number.doubleValue()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

Но это только получает значения с '' сепараторе. Когда пользователь вводит с точкой, он теряет все десятичные числа и возвращает, что 22.33 -> 22.0 или 4.1 -> 4.0 Когда я отлаживаю, я вижу, что это проблема синтаксического анализа (очевидно), но понятия не имею, какая хорошая практика для ее решения.

+0

Укажите язык программирования - это Java? – lospejos

+0

Обновленный вопрос. Да, это Java –

ответ

3

Как Мохит Тхакур сказал, но компилируется

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); 
try { 
    Number number = format.parse(formDto.getWeight().replace('.', ',')); 
    kitten.setWeight(number.doubleValue()); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

Спасибо Estanislao за вашу коррекцию. –

3

Вы можете заменить точку "." с запятой:.,»перед разбором

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); 
    try { 
     Number number = format.parse(formDto.replace('.', ',').getWeight()); 
     kitten.setWeight(number.doubleValue()); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
0

Once попробовать с этим:.

NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); 
     try { 
      Number number = Double.parseDouble(format.replace(",", ".").getWeight()); 
      kitten.setWeight(number.doubleValue()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

Благодаря

0

Если. вы просто хотите преобразовать значение String в Double, тогда это можно сделать с помощью подхода ниже:

String numberStr1 = "22,33"; //number with comma as decimal separator 
String numberStr2 = "22.33"; //number with dot as decimal separator 

System.out.println(numberStr1.contains(",") ? Double.valueOf(numberStr1.replace(',', '.')):Double.valueOf(numberStr1)); 
System.out.println(numberStr2.contains(",") ? Double.valueOf(numberStr2.replace(',', '.')):Double.valueOf(numberStr2)); 

Я использовал Java Tertiary Operator для достижения этой задачи. Вы можете сохранить двойное значение вместо печати на экран.

Если это не поможет или вы хотите сделать это специально с помощью NumberFormat, тогда дайте мне знать в комментариях.

 Смежные вопросы

  • Нет связанных вопросов^_^