Java除法运算的陷阱

2012-11-12

  除法运算谁不会啊,很多人不屑一顾,真是无知者无畏!

  其实除法、求余运算有一些陷阱。一旦计算发生了问题,还很不好找。不好找的原因主要是问题的偶然性太强,如果你知道可能发生什么问题,你的代码就可以写得更安全。

  数学除法规定,0不能做除数,因为会得到一个无穷大数据。

  西面看看Java中如何处理这些特殊情况:

  1、整数的除法:

  0做除数抛运行时异常;两整数商会做取整运算,Float或Double与一个整数做除法运算,则商位Float或者Double类型,例如:

  System.out.println("------------Int相关除法----------");

  System.out.println("12/10="+12/10);

  System.out.println("12f/10="+12f/10);

  System.out.println("12d/10="+12d/10);

  System.out.println("12/10f="+12/10d);

  System.out.println("12/10d="+12/10f);

  ------------Int相关除法----------

  12/10=1

  12f/10=1.2

  12d/10=1.2

  12/10f=1.2

  12/10d=1.2

  2、Double(或Float)除法运算:

  0可以做除数,得到的是一个分正负的无穷大;当两个数的绝对值均为0.0时候,商等于NaN。当0.0/x,x不等0.0时候,得到的一个带符号位0.0:

  package lavasoft.zerotest;

  /**

  * 浮点型数据的除法运算测试

  *

  * @author leizhimin 2009-12-21 9:00:37

  */

  public class TestZero {

  public static void main(String[] args) {

  System.out.println("------------Double型----------");

  Double x1 = div(2.3, 0.0);

  Double x2 = div(2.3, -0.0);

  Double x3 = div(0.0, 0.0);

  Double x4 = div(0.0, -0.0);

  Double x5 = div(0.0, 0.1);

  Double x6 = div(0.0, -0.1);

  if (x1.isInfinite()) System.out.println("x1无穷大!");

  if (x2.isInfinite()) System.out.println("x2无穷大!");

  if (x3.isNaN()) System.out.println("x3非数字!");

  if (x4.isNaN()) System.out.println("x4非数字!");

  if (x1 == Double.POSITIVE_INFINITY) System.out.println("x1 = Double.POSITIVE_INFINITY");

  if (x2 == Double.NEGATIVE_INFINITY) System.out.println("x1 = Double.NEGATIVE_INFINITY");

  if (x3 == Double.NaN) System.out.println("x3 = Double.NaN");

  if (x4 == Double.NaN) System.out.println("x4 = -Double.NaN");

    考试大温馨提示:本内容来源于网络,仅代表作者个人观点,与本站立场无关,仅供您学习交流使用。其中可能有部分文章经过多次转载而造成文章内容缺失、错误或文章作者不详等问题,请您谅解。如有侵犯您的权利,请联系我们,本站会立即予以处理。

    编辑推荐:

    功能大PK系列之预定义参数控

    怎样用Jvm处理Java数组

    Java数组之初始化及实例代码

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com