Как запретить Java преобразовывать штрих-код в научную нотацию - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь прочитать штрих-код из CSV-файла.Любопытно, что когда я открываю файл в IntelliJ, он показывает штрих-код полностью.Когда я пытаюсь прочитать CSV-файл, штрих-код преобразуется в число в научной записи.

Наиболее распространенным решением, которое я нашел в Интернете, было преобразование строки в двойное число с использованием Double.parseDouble (string).Но это вызывает исключение:

java.lang.NumberFormatException: For input string: "5,40014E+12"

Фактический метод:

public String getField(String barcode) {
    String field = null;
    try {
        String line;
        br = new BufferedReader(new FileReader(csvFile));
        br.readLine();
        while ((line = br.readLine()) != null) {
            String[] barcodeData = line.split(delimiter);
            System.out.println(Double.parseDouble(barcodeData[2]));
            if (barcodeData[2].equals(barcode)) {
                field = barcodeData[67];
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return field;
}

Этот метод используется в тесте, в котором есть жестко запрограммированный ожидаемый результат.Но field всегда возвращает null в этом случае, так как предложение if здесь никогда не вернет true.Фактическое исключение выдается в System.out.println, где я проверяю, как число читается из CSV.

Штрих-код должен быть: 5400141331875

Что на самом деле читается из файла CSV: 5,40014E + 12

Как запретить Java преобразовывать штрих-код в научную нотацию?

РЕДАКТИРОВАТЬ

Я нашел"решение".Если я не открою фактический файл CSV, числа не преобразованы в научную запись.Для меня это реальное решение, я надеюсь, что тот, у кого в будущем возникнет та же проблема, что и я, найдет реальный ответ, почему мои штрих-коды не удалось преобразовать из строки в двойную / длинную строку.Спасибо всем за помощь.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете попробовать следующее:

  BigDecimal bd = new BigDecimal("5400141331875");

  System.out.println(bd.longValue());  // this prints 5400141331875
0 голосов
/ 29 января 2019

Вы пытались разобрать его в Long вместо Double?Пожалуйста, смотрите ниже, я получаю значение, как ожидалось:

String s = "5400141331875";
System.out.println(Double.valueOf(s).longValue());

печатает 5400141331875

...