我正在嘗試從 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

慕后森
TA貢獻1802條經驗 獲得超5個贊
您可以嘗試以下方法:
BigDecimal bd = new BigDecimal("5400141331875");
System.out.println(bd.longValue()); // this prints 5400141331875
添加回答
舉報
0/150
提交
取消