Java 铸造错误
由于某种原因,当我试图编译代码时,我得到了一个精度错误。精度误差来自于第二种方法的返回,我试图计算周长。我做错了什么Java 铸造错误,java,casting,Java,Casting,由于某种原因,当我试图编译代码时,我得到了一个精度错误。精度误差来自于第二种方法的返回,我试图计算周长。我做错了什么 public class Methods2 { public static final double PI = 3.14; public static double calcCirc(double x) { return PI*x; } public static int calcCirc(int x) { return
public class Methods2
{
public static final double PI = 3.14;
public static double calcCirc(double x)
{
return PI*x;
}
public static int calcCirc(int x)
{
return (2*(double) x)*PI;
}
public static void main(String[]args)
{
System.out.println(calcCirc(10.2));
System.out.println(calcCirc(4));
}
}
calcCirc()
的两个版本都应该返回双精度
另外,请注意——考虑使用不同的方法名,因为它们接受的输入不仅在类型上不同,而且在语义上也不同
例如,
calcCircFromRadius(双半径)
,calcCircFromDiameter(双直径)
。这里没有理由将int
作为输入类型,因为Java会自动将int
s转换为double
s。两个版本的calcCirc()
都应该返回double
另外,请注意——考虑使用不同的方法名,因为它们接受的输入不仅在类型上不同,而且在语义上也不同
例如,
calcCircFromRadius(双半径)
,calcCircFromDiameter(双直径)
。这里没有理由将int
作为输入类型,因为Java会自动将int
s转换为double
s。您试图在声明返回int
的方法中返回double
值。Java不会让你这样含蓄地缩小你的价值
如果您不介意精度损失,那么显式地将值强制转换为int
——Java将允许您这样做
return (int) ((2*(double) x)*PI);
但是,我会将该方法改为返回double
,以保持精度:
public static double calcCirc(int x)
。。。正如您在使用另一个
calcCirc
方法时所做的那样。您正在尝试在声明为返回int
的方法中返回double
值。Java不会让你这样含蓄地缩小你的价值
如果您不介意精度损失,那么显式地将值强制转换为int
——Java将允许您这样做
return (int) ((2*(double) x)*PI);
但是,我会将该方法改为返回double
,以保持精度:
public static double calcCirc(int x)
。。。正如您已经使用另一个calcCirc
方法所做的那样。试试
public static int calcCirc(int x){
return (int)((2*x)*PI);
}
试一试
错误是什么?你得到了什么,你期望得到什么?也就是,<代码>数学>π/代码>。或者CalcCurc应该是双的,而不是int的,或者返回应该被转换成int。使用double而不是int作为参数类型和返回值。如果你真的想返回一个int(你不应该),你需要一个
(int)
强制转换。错误是什么?你得到了什么,你期望得到什么?也就是,<代码>数学>π/代码>。或者CalcCurc应该是双的,而不是int的,或者返回应该被转换成int。使用double而不是int作为参数类型和返回值。但是如果你真的想返回一个int(你不应该返回),你需要一个(int)
cast。