专栏首页.net core新时代double相加(減)结果会有些误差

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类型进行计算

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 附加没有日志文件的数据库方法

           今天客户那边执行SQL报错,经查看是客户服务器数据库磁盘已被全部用完,日志文件达到500GB的程度,后来由于我的错误操作导致日志文件(.ldf)被...

    用户1168362
  • 城市区号SQL

    今天写代码的时候需要用到全国城市区号,网上找了好久没有现成的SQL,于是自己录数据写了一个,和大家共享! 目前还只有300个城市的区号 文件下载地址放在最后! ...

    用户1168362
  • 我是怎么使用最短路径算法解决动态联动问题的

      省市县三级联动问题相信大家都耳熟能详了,选择市下拉选项依赖于省,同样的选择县下拉选项依赖于市。把省市县抽象成三个节点A(省),B(市),C(县),它们的关系...

    用户1168362
  • Manytasking MATP MOOMFO 中G函数

    DrawSky
  • 2020年最新阿里和美团面经

    阿里,31号电面,2020年元旦中午1点在线编程。最后挂了,面试官大哥说等我工作满三年再捞我

    Java学习录
  • C++中的数学函数汇总

    math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:

    于小勇
  • c++(三)

    函数在调用之前必须进行声明或者定义,函数的声明:返回值类型 函数名(参数类型 参数名称.......);其中参数名称可以省略;

    Dar_Alpha
  • 基础篇- iOS开发中常用的数学函数

    進无尽
  • C编程常用数学函数集锦

    double sqrt(double x) 返回x的开方 double cos(double x) 返回x的余弦cos(x)值,x为弧度 double si...

    苦咖啡
  • 蓝桥杯 JAVA 入门训练 圆的面积

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    逝兮诚

扫码关注云+社区

领取腾讯云代金券