首頁 > 常見問題 > numberformatexception是什麼異常

numberformatexception是什麼異常

青灯夜游
發布: 2021-01-14 18:25:46
原創
59226 人瀏覽過

numberformatexception表示數字格式化異常,需要查看字串裡面夾雜著string或其他類型,需要注意文字裡面的內容必須是數字形式的字串。

numberformatexception是什麼異常

本教學操作環境:windows7系統、Dell G3電腦。

今天出現了個數字轉換異常,處理好後稍微總結了幾個出現情境。




E/AdroidRutime:致命例外:java.lang.NumberFormatException: Invalid int: "0 "

java.lang .NumberFormatException 數字格式異常。當試圖將一個String

轉換為指定的數字類型,而該字串確不滿足數字類型要求的格式時,拋出該異常.

##Invalid int: "0 "  提示

把 "0 " 轉換成數字類型時出錯了.

具體是哪個類別的哪個方法的哪一行的錯誤了,看下面錯誤堆疊,at com. example.myclock.TimerView$5.onTextChanged(TimerView.java:95) com.example.myclock.TimerView 類別的onTextChanged方法裡, imerView.java的第95行出錯了

.

---- --原因分析--------------------######

"0 "在0後面有空格,當字串轉換成數字時應該要移除空格。

------解決方案--------------------

如: int vale##=Integer .parseInt(s.toString() .trim()); // ToString()是轉換為字串的方法Trim()是去字串兩邊空格的方法。

其他拋出NumberFormatException情況:

##情況一,超出轉換數值類型範圍:

用Integer.parseInt()轉換字元時拋出NumberFormatException異常,把字元改短一點又沒事
String   line3[1]= "8613719716 ";  #  int   int1=java.lang.Integer.parseInt(line3[1]); 
 

##以上是程式中的一小段,但正在執行的過程中總是拋出例外 


Exception   in   thread   "main "   java.lang.NumberFormatException:   For   input   string:   "86137197  For   input   string:   "86137197 ------原因分析-------------- ------

int型別儲存範圍是-2,147,483,648 --2,147,483,647。 用System.out.println(Integer.MAX_VALUE);輸出的是2147483647。 而你的 String line3[1]= "8613719716 ";超過了這個最大的值。

------解決方案--------------------

8613719716 根本無法直接用int表示的,只能用long , 如果更大了就得用到BigInteger 。 Long.parseLong(String)

參考:http://www.myexception.cn/j2se/NumberFormatException.html

##情況二,轉換值類型沒有考慮值為空的狀況:

在Android中這個序列是否正確,我打算把我得到的edittext中的值轉換為整數.

startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());

####################################################################################################################################################################如果###### logcat 出現如下錯誤#########. ###05-12 10:26:35.536: ERROR/AndroidRuntime(293): java.lang.NumberFormatException: unable to parse ' ' as integer##########

. ------原因分析--------------------

#如果textbox startTime_hour_edittext 為空, Integer.parseInt就會試圖把"" 轉換成integer。這就是NumberFormatException出現的原因。所以在轉換為int類型前需要判斷 textbox startTime_hour_edittext中是否為空。

------解決方案--------------------

#在使用 <span >startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());</span><span style="font-family:Arial,\Helvetica Neue\, Helvetica,sans-serif; color:#242729">之前</span>

判斷條件:

if(!startTime_hour_edittext.getText().toString().equalsIgnoreCase("")) {
startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());
}
登入後複製

情況三,由於進位不同:

題主要做一個進位轉換.並且限定範圍為30位的數(1073741823) 或(011111111111111111111111111111). 問題出現在試圖轉換1111111111111111111111111111Format為int型數值

if (checkNumber(input)) {
        try {
        number = Integer.parseInt(input);
        } catch (NumberFormatException ex) {
            log(ex.getMessage());
        }
    } else {
        toDecimal();
    }
登入後複製

這是檢查String的布林回傳值方法的程式碼.

private static boolean checkNumber(String input) {
    for (char c : input.toCharArray()) {
        if (!Character.isDigit(c)) {
            return false;
        }
    }

    return true;}
登入後複製

出現異常:

java.lang.NumberFormatException: For input string: "111111111111111111111111111111"
登入後複製

------原因分析------ --------------

因为 Integer.parseInt(String) 默认是十进制.

所以需要使用 Integer.parseInt(String, int) 并且指定要转换的n进制的数字的n。比如二进制是2.

------解决方案--------------------

int value = Integer.parseInt(input, 2);
登入後複製

更多编程相关知识,请访问:编程入门!!

以上是numberformatexception是什麼異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板