Числовое поле имеет экспоненциальные значения при записи данных в CSV-файл в Java - PullRequest
0 голосов
/ 13 марта 2019

При получении формы данных значение хранимой процедуры отображается как положено.Но при записи данных в CSV-файл с использованием сохранения значения Java в качестве экспоненциального значения как

  • Во время работы значение SP выглядит следующим образом: 1979903471947

  • Но в сгенерированномкак: 1.9799E + 12 (что-то в этом роде)

    public void writeCsvFile(String fileName) {
        StoredProcedureQuery query = entityManager.createStoredProcedureQuery("DTATA_FILE");
        query.registerStoredProcedureParameter(O_ERRNO_IN, Integer.class, ParameterMode.OUT);
        query.registerStoredProcedureParameter(CURSOR, Class.class, ParameterMode.REF_CURSOR);
        query.execute();
    
        List<Object[]> rows = query.getResultList();
        try (FileWriter fileWriter = new FileWriter(fileName)) {
            fileWriter.append(FILE_HEADER);
            fileWriter.append(NEW_LINE_SEPARATOR);
    
            for (Object[] row : rows) {
    
                getFileWriter(fileWriter, row);
    
            }
            logger.info("CSV file was created successfully !!!");
        } catch (Exception e) {
            logger.fatal("Error in CsvFileWriter !!!", e);
        }
    }
    
    private void getFileWriter(FileWriter fileWriter, Object[] row) throws IOException {
        for (int i = 0; i < row.length; i++) {
            fileWriter.append(String.valueOf(Objects.toString(row[i], "")));
            fileWriter.append(COMMA_DELIMITER);
        }
        fileWriter.append(NEW_LINE_SEPARATOR);
    }
    

IN SP:

to_char(am.dti_number)

to_char является обязательным в хранимой процедуре.

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Тот же результат, полученный при использовании toPlainString ()

private void getFileWriter(FileWriter fileWriter, Object[] row) throws IOException {
    for (int i = 0; i < row.length; i++) {
        if (i == 2) {

            BigDecimal bg;

            String str = row[i].toString();
            String s;
            bg = new BigDecimal(str);

            s = bg.toPlainString();

            fileWriter.write(s);
            fileWriter.append(COMMA_DELIMITER);

        } else {
            fileWriter.append(String.valueOf(Objects.toString(row[i], "")));
            fileWriter.append(COMMA_DELIMITER);
        }
    }
    fileWriter.append(NEW_LINE_SEPARATOR);
}
0 голосов
/ 13 марта 2019

Отформатируйте число следующим образом:

 NumberFormat nf = NumberFormat.getInstance(new Locale("en", "US"));
 String val = nf.format(n);

Вам может понадобиться настроить NumberFormat, чтобы получить то, что вы хотите.

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