为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2022-05-25 10:49:49
我正在尝试从 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 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

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

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

打印 5400141331875


查看完整回答
反对 回复 2022-05-25
?
慕后森

TA贡献1802条经验 获得超5个赞

您可以尝试以下方法:


  BigDecimal bd = new BigDecimal("5400141331875");


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


查看完整回答
反对 回复 2022-05-25
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信