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

简介: 原文:double相加(減)结果会有些误差  前提介绍       今天在调试代码的时候发现了一个double类型数据相减的有趣问题,148163.1 - 82692.09大家猜猜结果等于多少,经过调试最终为5471.010000000009。
原文: 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类型进行计算

 

目录
相关文章
|
SQL Java 数据库连接
springboot中配置mybatis别名该怎么写?
springboot中配置mybatis别名该怎么写?
|
9月前
|
API Windows
恶意代码分析入门--PE结构能告诉我们很多信息(chapter1_Lab01-04)
本实验分析了Lab01-04.exe文件,通过VirusTotal检测其是否匹配反病毒特征,检查是否存在加壳或混淆,并使用PEiD、Strings、Resource Hacker等工具进行静态分析,提取资源文件,分析其编译时间、导入函数及潜在恶意行为。实验在Windows XP SP3环境下进行。
164 5
恶意代码分析入门--PE结构能告诉我们很多信息(chapter1_Lab01-04)
|
SQL API 数据库
揭开高效数据层构建的秘密武器:Entity Framework Core 分页查询的最佳实践与性能优化技巧全解析
【8月更文挑战第31天】本文以随笔形式详细探讨了如何在Entity Framework Core中实现分页查询的最佳实践。通过创建基于EF Core的项目,配置数据库上下文,并定义领域模型,文章展示了如何使用`Skip()`和`Take()`方法进行分页查询。此外,还介绍了如何使用惰性加载、显式加载和预加载来优化性能,并通过投影技术减少不必要的数据加载。最后,文章强调了分页查询对于提升应用性能和用户体验的重要性。
346 0
|
算法 Python
Python高级数据结构——并查集(Disjoint Set)
Python高级数据结构——并查集(Disjoint Set)
513 2
|
应用服务中间件 PHP nginx
开启Nginx的目录文件列表功能
nginx默认是不允许列出整个目录的。如何开启Nginx的目录文件列表功能?打开nginx.conf文件,在location server 或 http段中加入 autoindex on;另外两个参数最好也加上去:autoindex_exact_size on;显示出文件的确切大小,单位是bytes。
1501 0
|
调度 C++
C++中的锁机制
C++中的锁机制
236 0
|
算法 网络协议 API
彻底明白如何设计一个良好的 API
现在软件开发流程都是协同合作的,前后端分离,那么我们如何实现对 API 的统一认知?又该如何设计一个良好的 API 接口?随着业务的演进,如何设计一个有兼容性的API?面对多种客户端,如何设计一个处处适用的 API 呢? RESTful 是目前最流行的 API 设计规范,通过一定的规范可以解决上面这些问题,对于 RESTful 架构的理解可以参考阮一峰老师的这篇文章(http://www.ruanyifeng.com/blog/2011/09/restful.html),简单一句话就是对服务器端资源进行操作,实现"表现层状态转化"。URI(统一资源定位符)代表一种资源,它可以是一段文本、一张图
|
XML 缓存 Java
面试官:讲讲Spring框架Bean的加载过程
面试官:讲讲Spring框架Bean的加载过程
1180 0
面试官:讲讲Spring框架Bean的加载过程
|
Web App开发 安全 Android开发
如何上架自己的应用到各大应用商店?
上架各大安卓应用商店(腾讯应用宝、阿里应用商店、百度手机助手、华为应用市场、小米应用商店)需要准备哪些材料?
1013 0