簡體   English   中英

如何在Java中避免NumberFormatException?

[英]How can I avoid a NumberFormatException in Java?

我找到了,但是一切都沒有用。 我的問題是,當我想從Stringdouble拋出NumberFormatException

字符串數組atomized包含許多字符串,我嘗試先輸出,使它們可見,所以我可以肯定有數據。 唯一的問題是雙重值。 它類似於5837848.3748980但是valueOf方法總是拋出異常。 我不知道為什么。

try
{
 int key = Integer.valueOf(atomized[0]);

 double value = Double.valueOf(atomized[1].trim());

 int role = Integer.valueOf(atomized[2]);

 Double newAccountState = this.bankKonto.charge(key, value, role);
 System.out.println("NEW Account State "+newAccountState);
 this.answerClient(newAccountState.toString());
}
catch (NumberFormatException e)
{
 System.out.println(e.getClass().toString()+" "+e.getMessage());
} 

異常輸出:

java.lang.NumberFormatException: For input string: "109037.0"
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.valueOf(Unknown Source)
        at vsys.ue02.server.Bank.computeData(Bank.java:122)
        at vsys.ue02.server.Bank.run(Bank.java:160)

它在這里工作正常。 所以我假設您的系統區域設置有,而不是. 用於小數分隔符。 要避免這些事情,您可以使用DecimalFormat

new DecimalFormat().parse("5837848.3748980");

從你的變量的名稱判斷 - 賬戶 - 我假設你正在處理錢。 您絕不能使用浮點類型來代表金錢。 使用BigDecimal ,或者可能是int

是使用DecimalFormat將字符串轉換為數字的起點。 此外,如果您正在處理貨幣和貨幣,您應該考慮使用BigDecimal而不是double。

您在一個帶小數點的數字上使用Integer.parseInt - 這不是一個有效的整數 - 在堆棧跟蹤中可見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM