Heim> häufiges Problem> Hauptteil

numberformatexception是什么异常

青灯夜游
Freigeben: 2021-01-14 18:25:46
Original
59058 Leute haben es durchsucht

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后面有空格,在字符串转换成数字时应该去除空格。

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

如:intvale=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: "8613719716 "

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

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中是否为空。

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

在使用startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString());之前

判断条件:

if(!startTime_hour_edittext.getText().toString().equalsIgnoreCase("")) { startTime_hour_int=Integer.parseInt(startTime_hour_edittext.getEditableText().toString()); }
Nach dem Login kopieren

情况三,由于进制不同:

题主要做一个进制转换.并且限定范围为 30位的数 (1073741823) 或者(0111111111111111111111111111111). 问题出现在试图转换 111111111111111111111111111111的时候,出现 NumberFormatException.

此代码是检查输入如果是二进制就转换为int型数值

if (checkNumber(input)) { try { number = Integer.parseInt(input); } catch (NumberFormatException ex) { log(ex.getMessage()); } } else { toDecimal(); }
Nach dem Login kopieren

这是检查 String的布尔返回值方法的代码.

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

出现异常:

java.lang.NumberFormatException: For input string: "111111111111111111111111111111"
Nach dem Login kopieren

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

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

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

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

int value = Integer.parseInt(input, 2);
Nach dem Login kopieren

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

Das obige ist der detaillierte Inhalt vonnumberformatexception是什么异常. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!