博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
double相加(減)结果会有些误差
阅读量:6695 次
发布时间:2019-06-25

本文共 588 字,大约阅读时间需要 1 分钟。

原文:

 

前提介绍

      今天在调试代码的时候发现了一个double类型数据相减的有趣问题,148163.1 - 82692.09大家猜猜结果等于多少,经过调试最终为5471.010000000009。

是不是很奇怪,下面将说明这其中的奥妙!

原因说明

     double属于floating binary point types,也就是说都double型的数值在相加减的时候,会将数值转换成二进制的数值如10001.10010110011这种表示发再做相加减,但是在转换成二进制代码表示的时候,存储小数部分的位数会有不够的现象,即无限循环小数,这就是造成微差距的主要原因。

解决方法

1.只取需要用到的位数:

 小数点台后面的位数部分就不要管了,不过这种方法不太好。

 2.使用Decimal类型:

 用Decimal就不会出现上面的问题了,可以准确的计算小数值,知识Decimal的范围比double小,一般情况下也够用了

 Decimal类型的有效位数达到28位,而double类型的16位,所以Decimal类型比Double类型能表示更精确的浮点数。相关知识可以参考下面的链接。

 

总结

1.在double类型数值进行比较大小的情况最好使用1.02-1.01==double.MinValue这种方式进行判断

2.使用double类型进行加减的情况下看看能否使用Decimal类型进行计算

 

转载地址:http://zmpoo.baihongyu.com/

你可能感兴趣的文章
常用ODBC连接字符串
查看>>
Win10+VS2015+EF6.0+MySQL5.6+MVC环境部署和排错
查看>>
三维偏序 cdq
查看>>
Tenegrad评价函数 分类: 图像处理 Open...
查看>>
VS如何连接2种类型的数据库
查看>>
数据事务四种隔离机制和七种传播行为
查看>>
WinForm界面布局空间---WeifenLuo.WinformUI.Docking
查看>>
关于提示表单执行的一些小问题!
查看>>
C#字符串的方法
查看>>
POJ 1274 二分图匹配
查看>>
学习小结(一) —— 基础数据结构
查看>>
WinDbg内核调试命令
查看>>
React文档(十七)非受控组件
查看>>
python中的metaclass
查看>>
大白叔叔专题之匹配、网络流(二)(第一题不是呐~)
查看>>
在centos中使用rpm安装包安装jenkins
查看>>
Linux释放内存空间
查看>>
利用ASP.NET DataGrid显示主次关系的数据
查看>>
关于CachedRowSetImpl类
查看>>
Typora – Markdown 简介
查看>>