zoukankan      html  css  js  c++  java
  • 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来;

  • 相关阅读:
    省选D2T2 滚榜
    CF1516E(第一类斯特林数)
    Atcoder ZEP F题
    Atcoder ARC 115 A~D
    Atcoder ARC 117
    「舞蹈链 DLX 」学习笔记
    「FJOI-2021」仰视那片离我远去了的天空。
    「UVA1603」破坏正方形 Square Destroyer
    「网络流」学习笔记
    博客搬家
  • 原文地址:https://www.cnblogs.com/qtiger/p/13652497.html
Copyright © 2011-2022 走看看