除法运算看起来很简单,一般人都会吧,如果不是java语言,而是C#或php的除法运算,那就真的简单,而java的除法运算如果也是不屑一顾,那真是无知者无畏!
其实java的除法、求余运算有很大的不同。java除法运算一旦计算发生了问题,还很不好找。不好找的原因主要是问题的偶然性太强,如果你知道可能发生什么问题,你的代码就可以写得更安全。
数学除法规定,0不能做除数,因为会得到一个无穷大数据。
下面看看Java除法运算中如何处理这些特殊情况:
1、java整数的除法:
0做除数抛运行时异常;两整数商会做取整运算,Float或Double与一个整数做除法运算,则商位Float或者Double类型,例如:
2、java中Double(或Float)除法运算:
0可以做除数,得到的是一个分正负的无穷大;当两个数的绝对值均为0.0时候,商等于NaN。当0.0/x,x不等0.0时候,得到的一个带符号位0.0:
陷阱:
零在整数预算中不可以做除数,否则抛运行时异常。
零在浮点运算中可以做除数,返回值为无穷大。
NaN各不相同,可看做是Java设计上的一个缺陷。
浮点型(Float或Double)的除法运算可以接受任何数值,并且结果总是返回一个浮点型的数值。这个数值可能是不合法的,需要进行判断和验证。
3、求余:和除法差不多。
陷阱:
符号位由被除数决定。
对于Double、Float,API都提供了几个有用的判断方法,要注意运用其写出安全的代码:
Double、Float类中都提供了一些常量,也可用于判断,当然这些常量也很有意思,看看源码就知道了。