C#基础知识之Double加减出现误差


概要

今天出现一个问题,235844.46-230000相减,得出的结果出乎意料,出来的结果如截图:

看到这个结果大感意外,尝试更改数值试试:

把235844.46更改为235844.47,然后235844.47-230000=5844.47,咦,居然正常了。

把把235844.46更改为235844.45,然后235844.45-230000=5844.45000000001,哎,又有问题了。

原因

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

解决方法

计算机计算都是二进制数字,首先是将数字转化成二进制数(这样容易造成二进制有可能位数不够的情况)然后再计算,这样就造成了误差,Decimal类型的有效位数达到28位,而double类型的16位;对于一般的数据量不大的计算推荐用Decimal来;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM