代码之家  ›  专栏  ›  技术社区  ›  Audiosleef

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

  •  2
  • Audiosleef  · 技术社区  · 5 年前

    我试图从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;
    }
    

    此方法用于存在硬编码预期结果的测试。但是在这种情况下,field总是返回null,因为if子句在这里永远不会返回true。实际的异常是在system.out.println中引发的,我在这里检查如何从csv中读取数字。

    条形码应为:5400141331875

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

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

    编辑

    我找到了一个“解决方案”。如果我不打开实际的csv文件,这些数字就不会转换成科学符号。对我来说,这是一个实际的解决方案,我希望有人有相同的问题,我在未来找到了实际的答案,为什么我的条码无法从字符串转换为双/长。谢谢大家的帮助。

    2 回复  |  直到 5 年前
        1
  •  0
  •   nullPointer    5 年前

    你试过把它解析成long而不是double吗? 请看下面,我得到了预期的值:

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

    印刷品5400141331875

        2
  •  -1
  •   Gauravsa    5 年前

    您可以尝试以下操作:

      BigDecimal bd = new BigDecimal("5400141331875");
    
      System.out.println(bd.longValue());  // this prints 5400141331875