1. 基础数据类型

大家都知道,Java中表示小数的基本类型有float, double, 如果你想计算0.3 - 0.1,很遗憾答案并不是0.2,有些人会说,用BigDecimal就可以啦,float和double就是会存在精度问题的。本文想探究一下,为什么, 为什么会无法得到正确答案。

先讲一些题外话,十进制和二进制。

计算机的世界是二进制,0和1组成,

二进制转十进制不在赘述,高中就学过的;

十进制转二进制,看下这个图, 应该也比较清楚了:

主要来看一下,十进制小数怎么转化为二进制(如果是3.45这类的小数拆分为3 和0.45,3按照上面的转换方式,0.45按照如下方式)。

这里,底是2。举例十进制0.1转为二进制:

 结果:   0.0

1. 0.1 * 2 = 0.2 整数0为二进制结果的第一位,即0.0;小数0.2作为源,继续执行

2. 0.2 * 2 = 0.4 整数0为二进制结果的第二位,即0.00;小数0.4作为源,继续执行

3. 0.4 * 2 = 0.8 整数0为二进制结果的第三位,即0.000;小数0.8作为源,继续执行

4. 0.8 * 2 = 1.6 整数1为二进制结果的第四位,即0.0001;小数0.6作为源,继续执行

5. 0.6 * 2 = 1.2 整数1为二进制结果的第四位,即0.00011;小数0.2作为源,继续执行

......

最后执行下去,发现0.1转换为二进制为(0.00011001100110011...)2

所以,十进制的0.1计算机无法精确表示。因此,0.3 - 0.1得到的就不是精确值了。不过如果你用0.5 - 0.125是可以得到0.375的,为什么呢?因为,2-1,2-2,2-3这些是可以精确表示的。

转载于:https://www.cnblogs.com/studentytj/p/9249778.html

关于数据精度的一些事相关推荐

  1. 遇事不责怪别人,换位思考能成全更好的自己

    在生活中,有时候有些人做的某些事可能会让你感觉不爽:这时,你最好不要急着去责怪他:试着把自己放在对方的处境,看看别人的生活,你才能看到人间百态,理解他人的难处. 每个人的生长环境不同,心境就不同:有些 ...

  2. 力所能及的做些自己喜欢和有趣的事

    我们每个人都有自己喜欢做的事:在自己可控且力所能及的情况下,在闲时,按自己的意愿去做些自己喜欢和有趣的事,会感觉到这事很有意义.在忙时,要为理想和奋斗而忙:不浪费时间在无意义的事和人身上. 朋友要的是 ...

  3. 不要纠结于过去发生的事

    在这个社会中,有些人很早就经历了一些不好的事,遇到不好的人:让他留了一些阴影.这时,应该学会不要纠结于过去发生的事情了!一件事情已经发生了,不管再怎么后悔也不能改变结局: 对这件事一直有懊悔之心,只会 ...

  4. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  5. 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事

    保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事 10 things to consider when securing an embedded 802.11 Wi-Fi device 随着 ...

  6. Python爬虫实战糗事百科实例

    爬取糗事百科段子,假设页面的URL是 http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个 ...

  7. 关于.NET玩爬虫这些事 【初码干货】

    这几天在微信群里又聊到.NET可以救中国但是案例太少不深的问题,我说.NET玩爬虫简直就是宇宙第一,于是大神朱永光说,你为何不来写一篇总结一下? 那么今天就全面的来总结一下,在.NET生态下,如何玩爬 ...

  8. 《创业维艰分享之五》所有得,有所乐,日事日清,循序渐进。

    这两个月公司连续做了两个大客户紧接着发布新版本再然后又是连续五个小版本迭代计划. 每天16小时的超强度工作,我已经看到兄弟的脸上都写着一个字:累! 我自己又何尝不是,既是客服,又是程序员,还必须是行政 ...

  9. 计算机改变了我们的生活英语作文带翻译,一件事改变了我的生活的英语作文,带翻译,求帮忙,最好是符合初中三年级的英语作文...

    满意答案 niqwe0j8 2020.03.21 采纳率:44%    等级:7 已帮助:57人 One thing that changed my life completely was that ...

最新文章

  1. python开发桌面软件-python适合windows的桌面应用程序开发吗?
  2. windows系统命令行下常用命令收集
  3. centos6.x redhat6.x 升级openssh8.7
  4. mybatis获取表名_mybatis plus 的动态表名的配置详解
  5. Linux 五种IO模型
  6. 强大的 pdf 编辑器 —— Acrobat
  7. 磁力计 姿态 matlab,磁力计如何用来计算姿态(1)
  8. Spark cluster 安装
  9. iOS UISearchBar 在界面跳转时出现灰色背景问题
  10. USB转TTL|mcuisp使用
  11. 单尺度retinex算法 matlab,单尺度retinex算法
  12. DeepLearning[花书] 参考资料
  13. java gc 监控_java 内存、GC、性能监控
  14. YOLOX: Exceeding YOLO Series in 2021 论文阅读笔记
  15. Excel/WPS做数据透视表,即对变量做交叉汇总(列联表)
  16. cmd打开python跳转到应用商店
  17. 大数据写入到Oracle数据库(批量插入数据)
  18. 自由运动物体的运动代码
  19. 51开发实例 基于51单片机的模拟电梯系统
  20. koa - 洋葱模型浅析

热门文章

  1. python安装第三方库win10_音频处理 windows10下python三方库librosa安装教程
  2. xshell连接虚拟机里的linux系统
  3. 分布式服务器客户端实验
  4. java什么是派生,Java中所有的类都是从( )类或其子类派生而来的。
  5. Redis系列(十四)、Redis6新特性之RESP3与客户端缓存(Client side caching)
  6. Redis的基本操作二
  7. spark之12:集群模式概述
  8. JavaScript中的一些细节
  9. 使用SQLiteHelper创建数据库并插入数据
  10. Linux 最常用命令