假设catch (err) {
console.error(err.response.data.errors);
}
是一个d
变量。如果double
中的值不大于int
的最大值,则编写一个if语句,将d分配给i
变量d
。
下面的方法是我尝试解决此问题的方法:
int
public static void assignInt(double d)
{
int i = 0;
if(d < Integer.MAX_VALUE)
i = (int)d;
System.out.print(i);
}
持有Integer.MAX_VALUE
。我假设这是2147483647
可以容纳的最大值?考虑到这一假设,我尝试致电int
3次:
assingDoubleToInt()
前两个调用输出:
public static void main(String[] args)
{
assignDoubleToInt(2147483646); //One less than the maximum value an int can hold
assignDoubleToInt(2147483647); //The maximum value an int can hold
assignDoubleToInt(2147483648);//One greater than the maximum value an int can hold. Causes error and does not run.
}
第三个调用2147483646
0
抛出assignDoubleToInt(2147483648);
,这不是比较"The literal 2147483648 of type int is out of range."
吗?如果比较结果应为2147483648 < 2147483647
,为什么要给i
赋值?
使用比较false
并不是正确的方法。如何测试d < Integer.MAX_VALUE
变量是否适合double
变量?
答案 0 :(得分:1)
int范围问题是因为您有一个int文字。通过后缀'd'使用双字面量:
public static void main(String[] args) {
assignDoubleToInt(2147483646); // One less than the maximum value an int can hold
assignDoubleToInt(2147483647); // The maximum value an int can hold
assignDoubleToInt(2147483648d);// One greater than the maximum value an int can hold. Causes error and does not
// run.
}
我相信您的相等性检验应为<=
,并且:“如果d中的值不大于int的最大值”-因此,如果它等于int的最大值,则为有效:
public static void assignDoubleToInt(double d) {
int i = 0;
if (d <= Integer.MAX_VALUE)
i = (int) d;
System.out.println(i);
}
答案 1 :(得分:0)
Integer.MAX_VALUE
持有2147483647
。我假设这是一个int可以容纳的最大值?
是的
抛出
"The literal 2147483648 of type int is out of range."
您无法创建表示int
范围之外的数字的int
文字,因此2147483647
是合法的,而2147483648
不是。如果要使用较大的整数文字,请使用带字母L的长文字:2147483648L
,或带小数点的双文字(或D):2147483648.0
(或{{1} }。
不是执行此操作的正确方法。
比较2147483648D
是合法的并且是正确的,因为将d < Integer.MAX_VALUE
扩展为Integer.MAX_VALUE
进行比较,并且double
可以({)}比double
大得多。您只需要确保可以传递上述正确的值即可。
(如以上评论中所述,应为Integer.MAX_VALUE
,并带有d <= Integer.MAX_VALUE
。)