&引用;可能的精度损失”;在我的Java程序中
我是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=
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
,然后它才能工作。能否正确设置问题的格式,非常感谢你的帮助