测试double的值是否小于int的最大值

时间:2019-03-25 22:20:09

标签: java int double

假设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变量?

2 个答案:

答案 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。)