.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
猜一猜: Console.WriteLine(5000.88 + 5000 == 10000.88); 结果为True还是False?

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

致命的错误出现在一个项目实践中: Console.WriteLine(5000.88 + 5000 == 10000.88);结果为False

分析:
用"=="来比较两个double应该相等的类型,返回真值完全是不确定的。计算机对浮点数的进行计算的原理是只保证必要精度内正确即可,例如:double a=0.9+0.2;那么只能保证小数点后1位这个精度是正确的,计算机计算这个加法的结果a的值可能是1.100000001,也可能是1.100000002也可能就是1.1,也就是说计算机计算后并不保证0.1以下各位得到的都是正确的,所以直接用==进行比较是不可行的。
 
比较两个double数是否相等应看其相减的绝对值是否小于某一数值,此值一般低于两数精确度
例如:Console.WriteLine(Math.Abs(5000+5000.88-10000.88)<0.001);
 
详细解释:
http://www.yoda.arachsys.com/csharp/floatingpoint.html
上正是讲述.NET中这个问题的。大家可以参考一下。



相关文章

相关软件