我正在嘗試從 csv 文件中讀取條形碼。奇怪的是,當(dāng)我在 IntelliJ 中打開文件時(shí),它會(huì)完整顯示條形碼。當(dāng)我嘗試讀取 csv 文件時(shí),條形碼被轉(zhuǎn)換為科學(xué)計(jì)數(shù)法的數(shù)字。我在網(wǎng)上找到的最常見的解決方案是使用 Double.parseDouble(string) 將 String 轉(zhuǎn)換為 Double。但這會(huì)引發(fā)異常:java.lang.NumberFormatException: For input string: "5,40014E+12"實(shí)際方法: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;}此方法用于有硬編碼預(yù)期結(jié)果的測(cè)試。但是在這種情況下,field 總是返回 null,因?yàn)?if 子句在這里永遠(yuǎn)不會(huì)返回 true。實(shí)際異常在 System.out.println 中引發(fā),我在其中檢查如何從 CSV 讀取數(shù)字。條形碼應(yīng)為:5400141331875從 csv 文件中實(shí)際讀取的內(nèi)容:5,40014E+12如何阻止 Java 將條形碼轉(zhuǎn)換為科學(xué)計(jì)數(shù)法?編輯我找到了一個(gè)“解決方案”。如果我不打開實(shí)際的 CSV 文件,數(shù)字不會(huì)轉(zhuǎn)換為科學(xué)計(jì)數(shù)法。對(duì)我來說,這是一個(gè)實(shí)際的解決方案,我希望將來有與我相同問題的人找到實(shí)際答案,為什么我的條形碼無法從 String 轉(zhuǎn)換為 Double/Long。謝謝大家的幫助。
2 回答

慕容708150
TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
您是否嘗試將其解析為 Long 而不是 Double ?請(qǐng)看下面,我得到了預(yù)期的值:
String s = "5400141331875"; System.out.println(Double.valueOf(s).longValue());
打印 5400141331875

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