Java代码如下:
String s = "0.01";
int i = Integer.parseInt(s);
但是,这引发了NumberFormatException ...可能出了什么问题?
Answers:
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
出现异常的原因是整数不包含有理数(基本上是分数)。因此,尝试解析0.3
为int是胡说八道。一个double
或一个float
数据类型可以容纳有理数。
Java将a转换double
为an的方式int
是通过将小数点分隔符后的部分舍入为0来完成的。
int i = (int) 0.9999;
i
将为零。
实际上,这种转换在Java中是难以理解的
例如下面的字符串:“ 100.00”
C:至少从1971年起就提供了一个简单的标准库函数(“ atoi”这个名字是从哪里来的?)
int i = atoi(decimalstring);
Java:通过Double(或Float)解析强制转换,然后强制转换
int i = (int)Double.parseDouble(decimalstring);
Java肯定有一些奇怪之处
100
)。您无法知道是否atoi
实际解析了字符串中的所有内容,字符串是否包含数字或数字是否溢出类型。strtol
是可以检测到以上所有情况的更好的替代方法。Java更加严格,但是可以确保涵盖所有这些情况。
Double.valueOf("16543").intValue();
所以当您想快速转换为int时,Java希望成为PITA,而Double则更为通用。