错误的投射

时间:2013-09-27 23:41:29

标签: 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 (2*(double) x)*PI;
   }
   public static void main(String[]args)
   {
      System.out.println(calcCirc(10.2));
      System.out.println(calcCirc(4));
   }
}

3 个答案:

答案 0 :(得分:3)

您试图在声明为返回double的方法中返回int值。 Java不会让你隐含地缩小你的价值。

如果您对精度损失感到满意,那么将值显式转换为int - Java将允许您这样做。

return (int) ((2*(double) x)*PI);

但是,我会更改方法以返回double,而不是丢失精度:

public static double calcCirc(int x)

...正如您已使用其他calcCirc方法所做的那样。

答案 1 :(得分:2)

calcCirc()的两个版本都应该返回双打。

另外,请注意 - 考虑使用不同的方法名称,因为它们接受的输入不仅在类型上而且在语义上都不同。

E.g。 calcCircFromRadius(double radius)calcCircFromDiameter(double diameter)。这里没有理由将int作为输入类型,因为Java会自动为您int转换double

答案 2 :(得分:0)

尝试

public static int calcCirc(int x){
    return (int)((2*x)*PI);
}