如何为十进制数做Integer.parseInt()?

时间:2009-09-20 13:13:19

标签: java parsing integer

Java代码如下:

String s = "0.01";
int i = Integer.parseInt(s);

然而,这会引发NumberFormatException ......可能出现什么问题?

10 个答案:

答案 0 :(得分:80)

String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;

异常的原因是整数不包含有理数(=基本上是分数)。因此,尝试将0.3解析为int是无稽之谈。 doublefloat数据类型可以包含有理数。

Java将double投射到int的方式是通过删除小数点分隔符之后的部分,将其舍入为零来完成。

int i = (int) 0.9999;

i将为零。

答案 1 :(得分:56)

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

答案 2 :(得分:24)

使用,

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

答案 3 :(得分:16)

String s="0.01";
int i = Double.valueOf(s).intValue();

答案 4 :(得分:9)

这种转换在Java中实际上是不太直观的

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

C:至少自1971年以来一个简单的标准库函数Where did the name `atoi` come from?

int i = atoi(decimalstring);

Java:Double(或Float)解析必须通过,然后是强制转换

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

Java肯定有一些奇怪的东西

答案 5 :(得分:3)

使用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();

答案 6 :(得分:3)

  

假设我们在字符串中使用整数。

     

String s =“100”;       int i = Integer.parseInt(s);       要么       int i = Integer.valueOf(s);

     

但在您的问题中,您尝试进行更改的号码是整数

     

String s =“10.00”;

     

double d = Double.parseDouble(s);

     

int i =(int)d;

通过这种方式,您可以获得正在尝试获取该值的答案。

答案 7 :(得分:2)

使用Double.parseDouble(String a)您要查找的内容不是整数,因为它不是整数。

答案 8 :(得分:2)

使用这个

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

答案 9 :(得分:0)

可能还有一个解决方案。

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

示例:

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

输出

10