求指点java

Kingspo 2013-04-14 05:12:08

Scanner s = new Scanner(System.in);
System.out.println("请输入:");
double x = s.nextDouble();
System.out.println(x);
if(Math.abs(x) % 180 == 90){
System.out.println("error");
}
else{
float y = (float)Math.tan(x*Math.PI/180);
System.out.println(y);
}



为什么当我输入180时,得到的结果不是0。 求解释。
...全文
186 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
汉武平侯 2013-04-14
  • 打赏
  • 举报
回复
Math.tan(Math.PI/(180/x)),刚写错了,x 是0的时候直接加if输出0吧
汉武平侯 2013-04-14
  • 打赏
  • 举报
回复
好像大数字类型可以,楼主不妨试试
汉武平侯 2013-04-14
  • 打赏
  • 举报
回复
Math.tan(Math.PI/180*x),理想情况下是这样的 但是可能因为java计算double时不精确,得到的数字总是一个无限趋于0的数,比如45度(Math.PI/4)运算结果是0.99999999,而不是1,Java菜鸟,不会解决这个问题了
Kingspo 2013-04-14
  • 打赏
  • 举报
回复
我想表达的意思是tan(180)=0,我要输入的x值为180,我想要的到的结果是0,简单点说就是实现tan()运算。 该怎么改。
TraitsWu 2013-04-14
  • 打赏
  • 举报
回复
我觉得 x*Math.PI/180 和 x/180 *Math.PI 的结果不一样,因为Math.PI 是个小数,x *Math.PI 也是个小数,系统对小数肯定存在精度的问题。。。是不是,求解决
汉武平侯 2013-04-14
  • 打赏
  • 举报
回复
tan(0)的值才是0,你这里的tan()括号运算结果也不是0啊,怎么会得到0呢
Kingspo 2013-04-14
  • 打赏
  • 举报
回复
int 不行吧 我刚试了。计算结果显然不对。
摆烂办不到 2013-04-14
  • 打赏
  • 举报
回复
该程序得到的结果为什么是0?float y = (float)Math.tan(x*Math.PI/180);这条语句中的x是180.0,相当于float y = (float)Math.tan(Math.PI);试问,等式左边是0吗? 若要使结果为0,请把y改成int型变量

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧