我的Java程序中“可能会丢失精度”

我是Java的新手。 我写了以下代码:

import java.io.*; import java.lang.*; public class distravel { public static void main(String args[]) { String a1,a2,a3; int x=2; float d,u,a,t; //d=distance travelled,u=initial velocity,a=acceleration,t=timeinterval try { InputStreamReader read=new InputStreamReader(System.in); BufferedReader buff=new BufferedReader(read); System.out.print("Enter the INTIAL VELOCITY:"); a1=buff.readLine(); u=Float.parseFloat(a1); System.out.print("Enter the ACCELERATION:"); a2=buff.readLine(); a=Float.parseFloat(a2); System.out.print("Enter the TIME:"); a3=buff.readLine(); t=Float.parseFloat(a3); d=((u*t)+a*Math.pow(t,x))/2F; System.out.print("The total DISTANCE TRAVELLED:"+d); } catch(Exception e) {} } } 

我收到此错误:

 distravel.java28:可能会损失精度
                                   发现:双倍
                                   要求:浮动
                                    d =((U * T)+ A * Math.pow(T,X))/ 2F;
                                                             ^

我该如何解决这个问题?

 d=((u*t)+a*Math.pow(t,x))/2F; 

应该

 d=(float)((u*t)+a*Math.pow(t,x))/2F; 

或者宣布d为GrahamS建议的double

不要在浮点数学计算中使用浮点数,除非您有特定的理由这样做(您没有)。 首选类型的开销是双倍,并不高得多,精度的好处也很大。

Math.pow返回double,因此你必须为’d’加倍。 或者你也可以将’d’投射到浮动状态。

这是因为Math.pow()返回一个double,然后你用它做一些计算。 无论你做什么计算,你必须处理的精度是双倍的。 因此,您收到错误消息。 解决方案:
1)使浮子加倍
2)将结果转换为float:d =(float)((u * t)+ a * Math.pow(t,x))/ 2F;

因为你将变量声明为float意味着它占用随机存取内存上的四个字节空间,它无法将所有数据存储在ram中,所以你必须将变量声明为double然后才能工作。