Math.round()给出意外值



我正在尝试使用Math.round对字符串值进行四舍五入,如下所示:

String numberString = "61867345124";
int value = Math.round(Float.parseFloat(numberString)); 

但我得到的值是2147483647,这是怎么回事?

实际上,这里有两个问题,

首先,输出是21474833647,因为这是整数在Java中可以存储的最大值。而且你的数字比这个大。您可以通过对封装器类调用max_value来确认基元类型的最大值,如下面的

System.out.println(Integer.MAX_VALUE);

如果Math.round的返回值大于Integer.MAX_value,它将返回一个可以存储的最大值的整数,

从这里的文档来看,

如果参数为正无穷大或大于或的任何值等于Integer.MAX_value的值,则结果等于Integer.MAX_value.的值

若要解决此问题,可以将结果存储在类型的变量中。

其次,这仍然不会得到您想要的结果,因为Math.round如果提供浮点输入,将返回一个整数。您需要它返回一个long,如果您为它提供一个双值,就会返回该long。

以下是Math类文档中的定义。

static int  round(float a)
static long round(double a)

总之,您既需要将输出存储为long,也需要将字符串值解析为double,如下所示,

String numberString = "61867345124";
long value = Math.round(Double.parseDouble(numberString));
System.out.println(value);

看起来您使用的数字远远大于整数所能包含的数字,因此输出默认为最大整数值2147483647。您可能想要使用long来存储该值。

最新更新