Java中可能出现精度损失错误

6
这是我的代码:

class test{

    public static void main(String arg[]){

        int a=10, b=20;
        float c = 30.123;
        int e = (int)c;
        System.out.println(e);

    }
}

我收到了这个错误提示:
test.java:6: error: possible loss of precision
        float c = 30.123;
                  ^
required: float
found:    double
1 error

为什么要这些?
2个回答

14

浮点数字面量默认为 double 类型。将一个 double 值赋给一个 float 类型会导致一些精度误差。您可以将 c 的类型更改为 double,或在其末尾添加 f 以使其成为 float 类型,例如:

float c = 30.123f;

@Eng.Fouad. :) 只是想让自己的头脑保持活跃,不要生锈。 ;) - Rohit Jain
默认使用双精度浮点类型的原因是在Java中,双精度浮点类型非常普遍。只有当我处理具有有限精度和良好处理的大量数字时,才会使用float。将c的类型更改为double将是更好的修复方法。 - Patricia Shanahan

2
如果您在数字末尾没有加上f,则会将其视为默认的double类型。
double d = 30.123;

对于浮点字面量,您应该在浮点值末尾添加f。
float c = 30.123f;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接