【问题标题】:How to write lengthy numbers in csv without getting converted into scientific notation如何在不转换为科学计数法的情况下在 csv 中写入冗长的数字
【发布时间】:2020-03-20 15:34:24
【问题描述】:

我正在将冗长的数字作为字符串写入 csv 文件。问题是,这些都是以科学计数法通知的。

2019100000000000 as 2.02E+15

有没有办法在 Java 中避免这种情况?我正在使用 apache commons 库来创建 csv。

private String visitNumber;
public String getVisitNumber() {
    return visitNumber;
}

List<CsvRecord> records = loadData();
    for (PrivateCorporatePatientListingCsv record : records) {
        csvPrinter.printRecord(
                record.getVisitNumber()
        );
    }

【问题讨论】:

  • 您是如何发现它们是用科学记数法表示的?我希望你没有用 Excel 打开 csv 文件……你能告诉我们你是如何写数字的吗?
  • 您可以将数字写成字符串,只要不带分隔符的字符串导出时不带引号。

标签: java csv number-formatting apache-commons


【解决方案1】:

您可以使用 NumberFormat 指定您希望如何将数字转换为字符串,在本例中是一个子类 DecimalFormat

【讨论】:

    【解决方案2】:

    使用BigInteger(整数值)或BigDecimal(定点)作为值保持类,而不是浮点,这也只是近似值(1.2 == 1.2000 == 实际上是 1.199999999978 等)。

    BigDecimal x = new BigDecimal("2019100000000000");
    String s = x.toPlainString(); // 2019100000000000
    

    【讨论】:

    • 但仍然 visitNumber 是一个字符串值。那么我需要将其转换为 BigDecimal 并再次转换为 String 吗?
    • 我可能不明白到底发生了什么。代码已经接收到带有科学电子符号的字符串以写入 CSV?那么 visitNumber 的调用者自己做错了数字到字符串的转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2010-11-11
    • 2018-12-12
    • 2019-04-21
    相关资源
    最近更新 更多