• double相加(減)结果会有些误差


    前提介绍

          今天在调试代码的时候发现了一个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类型能表示更精确的浮点数。相关知识可以参考下面的链接。

     c#中decimal ,double,float

    总结

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

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

  • 相关阅读:
    python之模块与包
    python之异常处理
    python之os与json&pickle模块
    python之random、time与sys模块
    python之re模块
    python之匿名函数、递归与二分法
    python之内置函数
    python之迭代器、生成器及列表推导式
    python之第一对象,函数名的应用,闭包
    python之命名空间与作用域
  • 原文地址:https://www.cnblogs.com/yanweidie/p/3561065.html
Copyright © 2020-2023  润新知