Исключение числового формата для десятичного числа, если задано двойное - PullRequest
0 голосов
/ 21 мая 2018

Когда я запускаю следующий скрипт для проверки inputQty больше AvailQty, я получаю следующее:

java.lang.NumberFormatException: для входной строки: "97,045.1193"

Эта ошибка возникает, если availableQty является десятичным числом.Значение доставляется из базы данных, не могли бы вы исправить, где я не прав?

   double AvailQty = Double.valueOf(AQTY.getValue());
   double inputQty = Double.valueOf(QTY.getValue());
   if(inputQty > AvailQty){
    session.setStatusMessage("Not Enough Quantity");
    //Abort operation
    throw new AbortHandlerException();
  }

Спасибо

Ответы [ 4 ]

0 голосов
/ 21 мая 2018

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

Этот ответ показывает, как изменить форматирование.

Вот пример теста, показывающий, как одно и то же число в вашем вопросе может быть успешно проанализировано:

 @Test
public void showNumberFormats() throws ParseException {
    String rawAvailQty = "97,045.1193";
    String rawInptQty = "98,045.3421";

    NumberFormat nf = NumberFormat.getNumberInstance();

    double AvailQty = nf.parse(rawAvailQty).doubleValue();
    double inputQty = nf.parse(rawInptQty).doubleValue();
    if(inputQty > AvailQty){
     //Abort operation
     System.err.println("Could not perform operation");
   }
    System.out.println("Available qty: " + AvailQty);
    System.out.println("Input qty: " + inputQty);
}

Отпечатки:

Could not perform operation
Available qty: 97045.1193
Input qty: 98045.3421
0 голосов
/ 21 мая 2018

Простой, ваша строка содержит запятые.Это не законно.Все, что вы можете иметь, это числа и точка (десятичный разделитель).Я не знаю, откуда вы берете значение, но если это не то, что вы можете изменить на этой стороне, вам придется взломать;)

Double.valueOf(INV.AVAILQTY.getValue().replaceAll(",","");
0 голосов
/ 21 мая 2018

Ваша строка содержит запятые, перед синтаксическим анализом удалите все запятые.

Double.valueOf(INV.AVAILQTY.getValue().replaceAll(",", ""));
0 голосов
/ 21 мая 2018

Не может отформатировать, потому что не принимает запятую.Вы можете сделать что-то вроде Double.valueOf(INV.AVAILQTY.getValue().replaceAll(",", "")) и Double.valueOf(XX_IGL_QTY.getValue().replaceAll(",", "")), чтобы удалить запятые перед анализом.

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