Apache commons CSVPrinter 正在编码 Double 值

Apache commons CSVPrinter is encoding Double values

我正在尝试从列表中读取一些数据并将其写入 csv 文件,而不进行任何格式化或编码。仅逗号分隔值

但问题是,当我写入任何值(例如 0.0000666)时,它编码为 6.66E-5。 我不想格式化。我想要的输出是 0.0000666 应该只写成 0.0000666。

// getting a list in input

    try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(fileName));
                CSVPrinter csvPrinter = CSVFormat.DEFAULT
                        .withEscape(Character.MIN_VALUE)
                        .withQuoteMode(QuoteMode.NONE)
                        .withHeader(HEADERS)
                        .withIgnoreHeaderCase()
                        .withTrim()
                        .print(bufferedWriter);) {
            
            csvPrinter.printRecords(list);

            bufferedWriter.flush();
            bufferedWriter.close();
            csvPrinter.close();

        } 

将值定义为字符串将在此处起作用。 例如:

 printer.printRecord(1, "john73", "John", "Doe", "0.0000666");

 printer.printRecord(1, "john73", "John", "Doe", 0.0000666);

所以我弄清楚了真正的问题所在。

如果值 < 1,Double 将自己编码为科学捐赠。 因此,每当我在 csv 中打印一些较小的值(如 0.0000666)时,CSVPrinter 都会将其写为 6.66E-5。

我在将值写入 csv 之前对其进行了格式化,并写入了格式化后的值。 像这样。

String.format("%.4f", 6.66E-5)