Java 如何对十进制数执行Integer.parseInt()运算?

Java 如何对十进制数执行Integer.parseInt()运算?,java,parsing,integer,Java,Parsing,Integer,Java代码如下所示: String s = "0.01"; int i = Integer.parseInt(s); 然而,这是抛出一个NumberFormatException。。。可能出了什么问题?0.01不是整数(整数),因此您当然无法将其解析为一。改用Double.parseDouble或Float.parseFloat String s = "0.01"; double d = Double.parseDouble(s); int i = (int) d; 例外情况的原因是整数不

Java代码如下所示:

String s = "0.01";
int i = Integer.parseInt(s);
然而,这是抛出一个NumberFormatException。。。可能出了什么问题?

0.01不是整数(整数),因此您当然无法将其解析为一。改用
Double.parseDouble
Float.parseFloat

String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
例外情况的原因是整数不包含有理数(=基本上是分数)。因此,试图将
0.3
解析为int是毫无意义的。
double
float
数据类型可以保存有理数

Java将
double
转换为
int
的方法是通过舍入到零来删除小数分隔符后面的部分


i
将为零。

使用
Double.parseDouble(字符串a)
您要查找的不是整数,因为它不是整数。

使用

String s="0.01";
int i= new Double(s).intValue();
用这个


int number=(int)Double.parseDouble(s)

这种转换在Java中非常不直观

以下面的字符串为例:“100.00”

C:一个简单的标准库函数,至少从1971年开始

Java:Double(或Float)解析的强制段落,后跟cast

int i = (int)Double.parseDouble(decimalstring);

Java确实有一些奇怪之处

使用BigDecimal进行舍入:

String s1="0.01";
int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact();

String s2="0.5";
int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact();
假设我们在字符串中取一个整数

字符串s=“100”; int i=整数.parseInt(s); 或 int i=整数。值为(s)

但在你的问题中,你试图改变的数字是整数

字符串s=“10.00”

double d=double.parseDouble(s)

int i=(int)d


通过这种方式,您可以得到您试图得到的值的答案。

还有一种解决方案是可能的

int number = Integer.parseInt(new DecimalFormat("#").format(decimalNumber))  
例如:

Integer.parseInt(new DecimalFormat("#").format(Double.parseDouble("010.021")))  
输出

10

你的演员阵容将完全失去分数信息。我不确定这是个好主意,好吧!也许我必须做一些类似于Double d=Double.parseDouble(s)的事情;是吗?@Kevin:是的,但是你也可以用“double”来代替“double”。他说他想要一个整数,但我们确定这就是他需要的吗?C只需忽略字符串的其余部分,然后解析它可以解析的任何内容(在本例中,它是
100
)。您无法知道
atoi
是否实际解析了字符串中的所有内容,字符串是否包含数字,或者数字是否溢出了类型
strtol
是一种更好的选择,可以检测到上述所有内容。Java更严格,但它确保涵盖所有这些情况因此,当您想要快速转换为int时,Java希望成为PITA,而Double更为通用。
int number = Integer.parseInt(new DecimalFormat("#").format(decimalNumber))  
Integer.parseInt(new DecimalFormat("#").format(Double.parseDouble("010.021")))  
10