Rumah> masalah biasa> teks badan

numberformatexception是什么异常

青灯夜游
Lepaskan: 2021-01-14 18:25:46
asal
59073 orang telah melayarinya

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()); }
Salin selepas log masuk

情况三,由于进制不同:

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

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

if (checkNumber(input)) { try { number = Integer.parseInt(input); } catch (NumberFormatException ex) { log(ex.getMessage()); } } else { toDecimal(); }
Salin selepas log masuk

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

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

出现异常:

java.lang.NumberFormatException: For input string: "111111111111111111111111111111"
Salin selepas log masuk

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

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

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

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

int value = Integer.parseInt(input, 2);
Salin selepas log masuk

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

Atas ialah kandungan terperinci numberformatexception是什么异常. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!