-2

说我有

Log.e("deg: "+dd,  "X:"+ Math.sin( Math.toRadians(dd) ) +"| Y:"+Math.cos( Math.toRadians(dd) ) );

如果 dd = 180,那么 sin 应该是 0 和 cos -1 ,对吗?但它输出

度数:180 X:1.2246467991473532E-16| Y:-1.0

有任何想法吗?谢谢!

4

2 回答 2

9

该值1.2246467991473532E-16 实际上为零,小数点后 16 位;它是0.00000000000000012246

如果这是问题,您只需要格式化显示的数字。

于 2012-08-03T13:25:02.130 回答
0

如上所述,这不是错误,只是计算机浮点运算的近似值。

为了得到预期的答案,因为 sin() & cos() 介于 -1, 0 , +1 之间,请尝试将其加 1 到所需的精度并减去 1。

x = round15(Math.sin(toRad(angle))+1)-1;

其中定义了 round15

public double round15(double x){
    DecimalFormat twoDForm = new DecimalFormat("0.##############E0");
    String str = twoDForm.format(x);
    return Double.valueOf(str);
}

它对我有用,希望未来的读者喜欢它。

于 2013-06-26T08:28:00.587 回答