&引用;可能的精度损失”;在我的Java程序中

&引用;可能的精度损失”;在我的Java程序中,java,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=

我是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:possible loss of precision found :double required :float d=((u*t)+a*Math.pow(t,x))/2F; ^ 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
声明为
double

在浮点数学计算中不要使用浮点数,除非您有这样做的特定原因(您没有)。首选类型double的开销不会太高,而且精度方面的好处也很大。

Math.pow返回double,因此必须为'd'使用double。或者您也可以将“d”强制转换为float。

这是因为Math.pow()返回一个double,然后使用该double进行计算。 无论你做什么计算,你必须处理的精度是原来的两倍。 因此,您会收到错误消息。 解决方案:
1) 使浮动加倍

2) 将结果强制转换为float:d=(float)((u*t)+a*Math.pow(t,x))/2F

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

能否正确设置问题的格式,非常感谢你的帮助