如何防止Java将条形码转换为科学符号

如何防止Java将条形码转换为科学符号,java,csv,bufferedreader,filereader,Java,Csv,Bufferedreader,Filereader,我正在尝试从csv文件中读取条形码。奇怪的是,当我用IntelliJ打开文件时,它会显示完整的条形码。当我尝试读取csv文件时,条形码被转换成科学记数法中的数字 我在网上找到的最常见的解决方案是使用Double.parseDouble(String)将字符串转换为Double。但这引发了一个例外: java.lang.NumberFormatException: For input string: "5,40014E+12" 实际方法: public String getField(Strin

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

我在网上找到的最常见的解决方案是使用Double.parseDouble(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;
}
此方法用于存在硬编码预期结果的测试中。但在这种情况下,字段总是返回null,因为if子句在这里永远不会返回true。实际的异常在System.out.println中抛出,我在其中检查如何从CSV读取数字

条形码应为:540014131875

从csv文件中实际读取的内容:540014E+12

如何阻止Java将条形码转换为科学符号

编辑


我找到了一个“解决方案”。如果我没有打开实际的CSV文件,则数字不会转换为科学符号。对我来说,这是一个实际的解决方案,我希望将来有人会遇到与我相同的问题,找到我的条形码无法从字符串转换为双精度/长精度的实际答案。谢谢大家的帮助。

您是否尝试过将其解析为Long而不是Double? 请参见下文,我得到了预期值:

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

打印540014131875

您可以尝试以下操作:

  BigDecimal bd = new BigDecimal("5400141331875");

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

您确定值
…E+12
不是因为
CSV
?在写入CSVBarcode数据时,必须使用
长的
。你应该把它当作一根绳子。如果你得到了科学记数法,问题就发生在你的程序参与之前。如果你用文本编辑器打开CSV,它的内容是什么?这不是答案。这是一个comment@Gauravsa我有点快。答案更新为Proposal需要转换的字符串是“540014E+12”,因为这是从CSV文件中读取的内容,尽管CSV中的内容是“540014131875”。而解析到Long会引发相同的异常。@Audiosleef不,它不会。尝试替换行
System.out.println(Double.parseDouble(barcodeData[2])System.out.println(Double.valueOf(barcodeData[2]).longValue())进行编码>并查看您需要的内容get@funkyjellyThrows:java.lang.NumberFormatException:对于输入字符串:“540014E+12”,OP希望避免转换为科学符号Throws:java.lang.NumberFormatException:字符,既不是十进制数字、小数点,也不是“e”符号指数标记。