如何防止Java将条形码转换为科学计数法

时间:2019-01-29 10:49:21

标签: java csv bufferedreader filereader

我正在尝试从csv文件读取条形码。奇怪的是,当我在IntelliJ中打开文件时,它会完整显示条形码。当我尝试读取csv文件时,条形码以科学计数法转换为数字。

我在网上找到的最常见的解决方案是使用Double.parseDouble(string)将String转换为Double。但这会引发异常:

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文件,则数字不会转换为科学计数法。对我来说,这是一个实际的解决方案,我希望将来与我有相同问题的人找到实际的答案,为什么我的条形码无法从String转换为Double / Long。谢谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

您是否尝试将其解析为Long而不是Double? 请看下面,我得到了预期的值:

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

打印5400141331875

答案 1 :(得分:-1)

您可以尝试以下操作:

  BigDecimal bd = new BigDecimal("5400141331875");

  System.out.println(bd.longValue());  // this prints 5400141331875