Java为Math.tan()计算输出了错误的值

Java为Math.tan()计算输出了错误的值,java,trigonometry,degrees,radians,Java,Trigonometry,Degrees,Radians,这是两个类的代码,用户必须输入两个角度的值和三角形部分的长度。我知道Java使用弧度,但即使使用Math.toDegrees或*180/Math.Pi进行简单的转换,仍然会得到错误的答案。例如,当输入角度30时,100*tan30度应为57.1,但我得到44.92。。。。守则: /**类来实现数学方法和数学导入 * */ /** *@作者奥利 * */ 公营气球{ //属性 私营机构1; 私人互联网2; 私人双距离1; 私人整数时间; 私人双h2; //施工人员 公共气球int ang1,in

这是两个类的代码,用户必须输入两个角度的值和三角形部分的长度。我知道Java使用弧度,但即使使用Math.toDegrees或*180/Math.Pi进行简单的转换,仍然会得到错误的答案。例如,当输入角度30时,100*tan30度应为57.1,但我得到44.92。。。。守则:

/**类来实现数学方法和数学导入 * */ /** *@作者奥利 * */ 公营气球{ //属性 私营机构1; 私人互联网2; 私人双距离1; 私人整数时间; 私人双h2; //施工人员 公共气球int ang1,int ang2,双区1,int t1{ 角度1=ang1;角度2=ang2;距离1=dist1;时间=t1; } //计算角度、距离和时间的方法 公共双高1{ 双h1; h1=距离1*Math.tanangle1*180/Math.PI; 返回h1; } 公共双高2{ 双氢; h2=距离1*Math.tanangle2-Math.tanangle1; 返回h2; } 公共双速{ 双sp1; sp1=h2/次; 返回sp1; } 公共双气球距离{ 双BD1; BD1=距离1/Math.cosangle2; 返回BD1; } } 的参数必须以弧度为单位


除非有令人信服的理由不这样做,否则我会对每个角度都使用弧度,因为弧度更容易使用。很容易将转换错误或完全忽略,就像您的代码所示。

30度角会导致代码如下所示:

double tangent = Math.tan(Math.PI/6.0);

其他任何东西都是错误的。

您使用弧度进行180度/Math.Pi。然而,你需要度到弧度的转换,这是

然后,最好实现一个实用函数,如

public int degreeToRadian(int degree)
{
   return degree * (Math.pi / 180);
}
对于度值,应该像这样使用Mathtan

Math.tan(degreeToRadian(angle));
您也可以使用,而不是上面提到的

公共静态双表a返回三角切线 角度的。特殊情况:如果参数为NaN或无穷大, 那么结果就是NaN。如果参数为零,则结果为 零与参数的符号相同。计算结果必须为 在精确结果的1 ulp范围内。结果必须是半单调的

参数:a-角度,以弧度为单位。返回值:函数的切线 争论

另见


我知道Java使用弧度,但即使使用Math.toDegrees或*180/Math.Pi进行简单的转换,仍然会得到错误的答案

你的弧度转换是错误的

做角度/180*pi,而不是角度*180/pi, 或者使用toRadians,而不是toDegrees。
另外,请注意,对于某些tan计算,您根本不转换…

您可以使用Math.Toradiance degree进行转换,而不是使用Math.Toradiance degree进行转换

无论如何,您应该使用内置函数进行转换:

double deg = 30;
double tan = Math.tan(Math.toRadians(deg));
System.out.println("Tan: " + tan);
System.out.println("ATan: " + Math.toDegrees(Math.atan(tan)));
将打印


有时,你只使用角度,有时你似乎把它转换成弧度。此外,您的转换似乎是错误的:尝试angle/180*pi,但是,您又说,即使使用内置方法也不起作用……如果您说问题是tan,那么为什么要发布所有这些代码,其中100*tan30=57.74?我知道Java使用弧度-显然你没有。@Oli那么,下面的答案对你有用吗?更好地使用而不是滚动你自己的…是的,你是对的@tobias_k。我相应地更新了我的答案。
Tan: 0.5773502691896257
ATan: 29.999999999999996