当前位置:  技术问答>java相关

居然1==0.9999999999和5!=4.999999999都成立??????!!!!!!!!!!!!!!!

    来源: 互联网  发布时间:2017-04-08

    本文导语:  class My1 {   public static void main(String[] args)   {   if(1==(3*(1.0/3.0)))    {   System.out.println("1==0.999999");   }   else System.out.println("1!=0.999999");   } } 结果为:1==0.999999 class My {   public static void main(String[] args)   { ...

class My1
{
  public static void main(String[] args)
  {
  if(1==(3*(1.0/3.0))) 
  {
  System.out.println("1==0.999999");
  }
  else System.out.println("1!=0.999999");
  }
}
结果为:1==0.999999
class My
{
  public static void main(String[] args)
  {
  double d=0.0;
  while(d!=5.0)
    {
      d=d+(1.0/3.0);
      System.out.println(""+d);
    }
  }
}
结果永远不跳出while(){}????

|
up

|
不是!结果为:1==0.999999!打印的信息应该是1==1才对呀!
哈哈!犯了自己欺骗自己的错误!

|
这是cpu的精度问题,这不光是java特有的别的语言也有这个问题

|
1==(3*(1.0/3.0))你的比较运算有问题,在这里,java把3*(1.0/3.0)自动转换成int型,结果进位成了1。第二个也一样。

|
1d!=0.999999999999d

|
你试试这个:
class My1
{
  public static void main(String[] args)
  {
  if(1.0==(3*(1.0/3.0))) 
  {
  System.out.println("1.0==0.999999");
  }
  else System.out.println("1.0!=0.999999");
  }
}



class My
{
  public static void main(String[] args)
  {
  int d=0;
  while(d!=5)
    {
      d=d+(1.0/3.0);
      System.out.println(""+d);
    }
  }
}

|
同意 bumaple(蓝枫) 的说法,看来你还是初学

|
你测试的第一个是1==1.99999999999999999999999,而不是你所说的,第二个你不应选择(1.0/3.0),所的结果相差太大!!!

|
还有,你仔细看书,float和double是不可以这样比较相等不相等的。具体的是关于float和double的存储形式的问题了。

|
呵呵。基础问题。就当是规则、公理。

|
程序语言的设计中:

无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 成立java协会不如成立ejb俱乐部,不过大概没有谁会喜欢ejb了
  • 这两种写法成立吗???
  • 建议成立程序员工会
  • 提议:成立SCO UNIX联盟!
  • 祝贺unixlinux板块正式成立^_^
  • 既然有moblin的专区,是否应该成立Embedded Linux专区呢
  • KJAVA开发联盟成立了!欢迎欢迎,热烈欢迎!
  • 在servlet循环中如何在条件成立时,不再执行下面的程序立刻跳转到别的页面(在线等待)
  • 杭州的java程序员,咱们成立一个java协会吧?具体做些什么大家共同讨论。。支持者有分


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3