Sin/Cos在java/android中不起作用

Sin/Cos在java/android中不起作用,java,android,Java,Android,说我有 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 有什么想法吗?谢谢 值1.2246467991473532E-16实际上为零,小数点后16位;它是0.00000000000000012246

说我有

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


有什么想法吗?谢谢

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


如果这是问题所在,您只需格式化数字以供显示。

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

要获得预期的答案,因为sin()和cos()介于-1、0和+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);
}

它适合我,希望未来的读者喜欢。

int,但我想我也尝试过使用double和float。你可以使用,例如,类。明白了!private double format(double value){return(double)Math.round(value*1000000)/1000000;//您可以将其更改为对值进行四舍五入(对于两个位置,使用100…)},或者只需
新的十进制格式(“#.#####”)。format(value)
,以三位小数的格式设置。