首页  韩国资源  酷站加油  我的展厅  设计名站  古典元素  推荐下载  设计欣赏  每周专访  招募精英  人才专区  网页教程  平面设计  编程开发  设计竞赛
当前位置:首页 > 编程开发 > JSP教程 > 正文
Google
使用浮点数和小数中的技巧与陷阱
来源:赛迪网 作者:imyf_liang 2008年02月28日 09:45 网友评论:0条 点击:
浮点中的危险

由于无穷大、NaN 和 0 的特殊行为,当应用浮点数时,可能看似无害的转换和优化实际上是不正确的。例如,虽然好象 0.0-f 很明显等于 -f ,但当 f 为 0 时,这是不正确的。还有其它类似的 gotcha,表 2 显示了其中一些 gotcha。

表 2. 无效的浮点假定

这个表达式……     不一定等于……     当……
0.0 - f     -f     f 为 0
f < g     ! (f >= g)     f 或 g 为 NaN
f == f     true     f 为 NaN
f + g - g     f     g 为无穷大或 NaN

舍入误差

浮点运算很少是精确的。虽然一些数字(譬如 0.5 )可以精确地表示为二进制(底数 2)小数(因为 0.5 等于 2 -1),但其它一些数字(譬如 0.1 )就不能精确的表示。因此,浮点运算可能导致舍入误差,产生的结果接近 ― 但不等于 ― 您可能希望的结果。例如,下面这个简单的计算将得到 2.600000000000001 ,而不是 2.6 :

 double s=0;
  for (int i=0; i<26; i++)
    s += 0.1;
  System.out.println(s);

 

类似的, .1*26 相乘所产生的结果不等于 .1 自身加 26 次所得到的结果。当将浮点数强制转换成整数时,产生的舍入误差甚至更严重,因为强制转换成整数类型会舍弃非整数部分,甚至对于那些“看上去似乎”应该得到整数值的计算,也存在此类问题。例如,下面这些语句:

 double d = 29.0 * 0.01;
  System.out.println(d);
  System.out.println((int) (d * 100));

 

将得到以下输出:

 0.29
  28


这可能不是您起初所期望的。

首页 上一页 [1] [2] [3] [4] 下一页 尾页
上一篇:在Java中监控文本框的变化   下一篇:JAVA语言操作数据库方式与设计模式应用
收藏此页】【打印】【关闭
 相关文章  我要点评
·Jsp页面URL中传递参数乱码的解决方法
·JSP中表单数据存储的通用方法
·JSP+JavaScript打造二级级联下拉菜单
·建立JSP操作用以提高数据库访问效率
·JSP环境中如何配置和使用fckeditor
·实现Thread缓冲池的一个简单方法
·String中三种加法的区别
·JSP中的三种页面跳转方式

免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有任何异议,请联络:68design#163.com
转载要求:作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印。



关于我们 | 在线反馈 | 广告报价 | 友情链接 | 联系我们 | 免责声明 | 在线投稿 | 网站地图
Copyright © 2003-2007 68design.net, All Rights Reserve 【找网页设计师,当然上网页设计师联盟】