我正在尝试使用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来存储该值。