快速业务通道

Java除法运算的陷阱 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
    Float y5 = div(0.0f, -0.1f);                  System.out.println("------------比较测试----------");                  Float a = 99999999999999999999999999999999999999f;                  Float b =  0.000000000000000000000000000000000000000000001f;                  Float t = a / b;                  System.out.println(t);                  System.out.println(Float.MAX_VALUE);                  if (t >= Float.MAX_VALUE) {                          System.out.println("a/b的商已经超过了 Float的最大值了!");                  }          }          public static Double div(double a, double b) {                  double x = a / b;                  System.out.println(a + "/" + b + " = " +  x);                  return x;          }          public static Float div(float a, float b) {                  float x = a / b;                  System.out.println(a + "/" + b + " = " +  x);                  return x;          } }

Java除法运算的陷阱(2)

时间:2011-07-25 51cto博客 熔岩

运算输出:

------------Double型---------- 2.3/0.0 = Infinity 2.3/-0.0 = -Infinity 0.0/0.0 = NaN 0.0/-0.0 = NaN 0.0/0.1 = 0.0 0.0/-0.1 = -0.0 x1无穷大! x2无穷大! x3非数字! x4非数字! x1 = Double.POSITIVE_INFINITY x1 = Double.NEGATIVE_INFINITY ------------Float型---------- 2.3/0.0 = Infinity 2.3/-0.0 = -Infinity 0.0/0.0 = NaN 0.0/-0.0 = NaN 0.0/-0.1 = -0.0 ------------比较测试---------- Infinity 3.4028235E38 a/b的商已经超过了Float的最大值了! Process finished with exit code 0

陷阱:

零在整数预算中不可以做除数,否则抛运行时异常。

零在浮点运算中可以做除数,返回值为无穷大。

NaN各不相同,可看做是Java设计上的一个缺陷。

浮点型(Float或Double)的除法运算可以接受任何数值,并且结果总是返回一个浮点型的数值。这个 数值可能是不合法的,需要进行判断和验证。

3、求余:和除法差不多。

System.out.println(23%4); System.out.println(23%-4); System.out.println(-23% 4); System.out.println(23f%4); System.out.println(23d%4); System.out.println(23% 4f); System.out.println(23%4d); System.out.println(23f%0); System.out.println(23% 0.0); System.out.println(0.0%0.0);

运行结果:

3 3 -3 3.0 3.0 3.0 3.0 NaN NaN NaN

Java除法运算的陷阱(3)

时间:2011-07-25 51cto博客 熔岩

陷阱:

符号位由被除数决定。

对于Double、Float,API都提供了几个有用的判断方法,要注意运用其写出安全的代码:

boolean isInfinite() 如果该 Double 值的大小是无穷大,则返回 true;否则返回  false。 static boolean isInfinite(double v) 如果指定数字的大小是无穷大,则返回  true;否则,返回 false。 boolean isNaN() 如果此 Double 值是非数字(NaN)值,则返回  true;否则,返回 false。 static bo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号