可能丢失精度误差与类型不匹配错误

Ran*_*ity 0 java java-7

所以每个人都在发帖时写下以下代码,他们会得到"可能的精度损失"错误:

float c= 30.123;
Run Code Online (Sandbox Code Playgroud)

我尝试了相同的代码和编译失败,出现此错误"类型不匹配:无法从double转换为float".我用Java 7运行它.

谁知道发生了什么?

Bil*_*ard 6

30.123隐含地是一个double.编译器告诉您double在为float变量赋值时会丢失精度.做了

float c = 30.123f;
Run Code Online (Sandbox Code Playgroud)

原始数据类型


不同的错误消息来自不同的IDE.我把那行放在一个文件中并在三个IDE中检查它并尝试从命令提示符编译它,我得到了四个不同的错误消息.

命令提示符:

C:\Users\Bill\Desktop>javac Num.java  
Num.java:5: error: possible loss of precision  
       float c= 30.123;  
                ^  
  required: float  
  found:    double  
1 error  
Run Code Online (Sandbox Code Playgroud)

的IntelliJ:

不兼容的类型.
必需:float
找到:double

日食:

类型不匹配:无法从double转换为float

BlueJ的:

可能
需要的精度损失:浮动; 发现:双倍