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。