你上面说4/5=0.8是吧!
想想你的c定义成整型,而a/b的结果却是浮点型。
很明显类型有问题你可把a/b的答案先转换成整型再试试看一下如何?

解决方案 »

  1.   

    好像double的0不是一个真正意义上的0,而是一个近似于0的非0值
      

  2.   

    有顺序的。 对于float转int或double转int等都是不能转的。 而反过来可以。 
    0.8当然不能转成int
      

  3.   

    当java中的类型转换属于缩小转换时,必须使用类型强制转换,如果你改成(int)(a/b) ,就没事了。这样,会把小数点部分截断。
    要不你就想你前面做的那样。让表达式类型提升,全部提升成double类型。那样也不会错。
      

  4.   

    浮点数的赋值是带有小数点的数字缺省是double型的,如果在浮点数后面加f或者F则是float,后面加d或者D则是double,科学计数法形式的浮点数也是double型的,而double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要。
      

  5.   

    首先明确一点,double是对a生效,而不是对a/b生效,否则要表达为(double)(a/b);第二,JAVA中的浮点运算中有三个特殊的值:
    正无穷大---------Double.POSTIVE_INFINITY  正数被0除就是这个常量!!!
    负无穷大---------Double.NEGATIVE_INFINITY
    非数字-----------Double.NaN我认为零就是零,没什么近似不近似的,任何进制都能表达,也不是0.1!!
    当(double)a后,要做除法时,b的类型会先隐式转换int-->double,这样转化成浮点运算,既然是double浮点运算就不会抛出异常,因为以上说的3个特殊常量有定义。但是你要做int c=a/b就不行了,本身就都是整型,你除0算什么啊?!!
      

  6.   

    看了一下ArithmeticException地说明:
    Thrown when an exceptional arithmetic condition has occurred. For example, an integer "divide by zero" throws an instance of this class.它强调了整数除0抛出例外