java 为什么不允许给float类型的变量赋值double常量?[duplicate]

njthzxwz  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(123)

此问题在此处已有答案

Casting rules for primitive types in java(1个答案)
8小时前关门了。
在java中,编译器会抛出一个错误,如果你试图给一个int型变量赋值,但是它允许给long型变量赋值。

double d = 4.0;
    float f = d; // this is not allowed. 4.0 should be 4.0f

    int i = 4;
    long x = i; // this is allowed. 4 is treated same as 4L
edqdpe6u

edqdpe6u1#

因为int适合放在long里面,但是如果你把double放在float里面,你可能会失去精度(它是一个更窄的类型)。
如果你真的需要,你可以通过施法来强制

double d = 4.0;
float f = (float)d; // this is allowed
rbpvctlc

rbpvctlc2#

因为它们的类型和宽度不同。因为从double到float或者long到int会丢失精度,所以需要向下转换。

double d = 4.0;
float f = (float)d;

long i = 4;
int x = (int)i;

对于整数类型,可以通过调用Math.toIntExact并捕获ArithmeticException来检测overflow

try{
    int myInt = Math.toIntExact( myLong ) 
} catch (ArithmeticException e) {
    …
}

相关问题