说我有
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
任何想法?谢谢!
答案 0 :(得分:9)
值1.2246467991473532E-16
有效为零,小数点后16位;它是0.00000000000000012246
。
如果这是问题,您只需要格式化显示数字。
答案 1 :(得分: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);
}
它对我有用,希望未来的读者喜欢它。