由于某些原因,当我尝试编译代码时出现精度错误。在我尝试计算周长的第二种方法的回归中出现了精度误差。我做错了什么?
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));
}
}
答案 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);
}