C#中的Infinity有个小坑
2015-05-15 23:14
141 查看
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)
昨天家里有事,上网也不方便,就没有推送文章。今天很累,也不长篇大论了。简单介绍一下最近遇到的一个小坑。
我们知道,在C#中主要有如下几种数值类型:int、long、decimal、float和double。对于前三种,如果除零,那么会提示表达式错误(直接书写数字)或报DivideByZeroException异常(使用变量);对于后面两种,除零会得到正负无穷大,除非你是0.0/0.0那么会得到NaN(非数字)。大部分参考资料都是这样告诉大家的。比如“阅读原文”这篇浅显易懂的文章。
最近,之前的代码出现一个bug,老是出现Infinity,然后排查了所有除法表达式,问题都无法解决。跟踪出现Infinity之前的变量值,发现“1E+300 * 1E+10”的乘法,遂仔细研究代码逻辑,发现某些变量(double类型)被重复相乘越来越大,乃至变成了无穷大。才意识到不仅除零会出现无穷大,大数相乘也会出现无穷大。大家以后小心。
原文地址:http://blog.csdn.net/seattle1215/article/details/6660138
昨天家里有事,上网也不方便,就没有推送文章。今天很累,也不长篇大论了。简单介绍一下最近遇到的一个小坑。
我们知道,在C#中主要有如下几种数值类型:int、long、decimal、float和double。对于前三种,如果除零,那么会提示表达式错误(直接书写数字)或报DivideByZeroException异常(使用变量);对于后面两种,除零会得到正负无穷大,除非你是0.0/0.0那么会得到NaN(非数字)。大部分参考资料都是这样告诉大家的。比如“阅读原文”这篇浅显易懂的文章。
最近,之前的代码出现一个bug,老是出现Infinity,然后排查了所有除法表达式,问题都无法解决。跟踪出现Infinity之前的变量值,发现“1E+300 * 1E+10”的乘法,遂仔细研究代码逻辑,发现某些变量(double类型)被重复相乘越来越大,乃至变成了无穷大。才意识到不仅除零会出现无穷大,大数相乘也会出现无穷大。大家以后小心。
原文地址:http://blog.csdn.net/seattle1215/article/details/6660138
相关文章推荐
- C# 中的 Infinity 和 NaN
- 浅谈C#中的Infinity和NaN
- C#的Infinity和NaN
- ASP.NET C# 文件下载速度限制
- C#实现窗口最小化到系统托盘
- C#调用ArcGIS REST服务
- C# Socket.Connect连接请求超时机制
- C# 阻止电脑关机
- C# 使用摄像头拍照 支持Win7 64位
- C# MDI 子窗体被父窗体控件挡住
- C# Socket服务器端如何判断客户端断开
- 使用C#获取CPU及硬盘序列号的源代码
- Serializable在C#中的作用.net中的对象序列化 (转)
- C#学习笔记 -- Attribute
- C# Winform窗体自动运行隐藏
- C#中ToString和Formate格式大全
- C# 虚方法(virtual)和抽象方法(abstract)方法的区别
- c#上传下载ftp(支持断点续传)
- C#_Soap调用webservice服务
- string.Format对C#字符串格式化