学习目标:
单精度和双精度的运算问题


问题引出:

当我们在运行如下输出语句时

System.out.println(2.5-0.9);
System.out.println(2.4-0.8);System.out.println(2.5f-0.9f);
System.out.println((2.4f-0.8f));

输出结果如下:可能很多人就会疑惑了,不都是输出1.6吗?怎么就输出各不一样呢?


1.6
1.5999999999999999
1.6
1.6000001

问题解决:

首先,大家都知道,小数默认是Double类型,也就是说1.0是双精度型。而计算机底层是以二进制的补码形式存储数据,包括在进行四则运算,取余等操作。而我们发现2.5的小数部分0.5是可以被二除尽的,即2^-1次方,此时就是问题所在,而0.9在利用短除法求二进制时,是得不到整数,也就是无法用二进制表示,但是计算机底层会将它取出前52位(化成十进制则有14位)而后面的被舍弃。此时就会出现精度损失。 float类型也是一样的,只取前7位小数。所以也会有精度损失。

总结:在计算中只要有一个不精度损失,则结果也不损失。


如何解决

那如何解决两个都精度损失的数字的运算呢?就比如2.4-0.8,我还是要得到1.6,那该怎么办呢?
这里我们推荐大家使用BigDecimal类。

//add方法 +
//subtract方法 -
//multiply方法 *
//divide方法 /
BigDecimal d1 = BigDecimal.valueOf(2.4);
BigDecimal d2 = BigDecimal.valueOf(0.8);
double result = d1.subtract(d2).doubleValue();
System.out.println(result);
//输出结果:1.6

这样问题就轻松解决了。

单精度和双精度的运算问题相关推荐

  1. c++单精度和双精度的运算例子(计算机占位存储)

    计算机中float, double类型数据分别占据4,8个字节,其中float类型和double可以表示的小数位数不同,导致了精度不同.double的精度更高. 计算机中数据的表示由:符号位, 指数位 ...

  2. 科普 | 单精度、双精度、多精度和混合精度计算的区别是什么?

    科普 | 单精度.双精度.多精度和混合精度计算的区别是什么? 转自:https://zhuanlan.zhihu.com/p/93812784 我们提到圆周率 π 的时候,它有很多种表达方式,既可以用 ...

  3. 双精度数举例_c语言中,常量,变量,浮点,单精度,双精度是什么意思?举例...

    展开全部 实型常量又称实数或浮点数.在C语言中可以用单精度型和双精度型两种形式表示实型常量,分别用e68a84323131333532363134313032313635333133343137656 ...

  4. 单精度、双精度和半精度浮点格式之间的区别

    源自公众号strongerHuang 单精度.双精度和半精度浮点格式之间的区别 IEEE 浮点算术标准是用来衡量计算机上以二进制所表示数字精度的通用约定.在双精度格式中,每个数字占用64位,单精度格式 ...

  5. Java单精度与双精度区别_java单精度和双精度的区别

    为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽,而精 ...

  6. java中单精度_java单精度和双精度的区别

    描述 为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽 ...

  7. python单精度和双精度_单精度、双精度、多精度和混合精度计算的区别是什么?...

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 编排 | strongerHuang 微信公众号 | 嵌入式专栏 我们学过数学,都知 ...

  8. python单精度和双精度的区别_单精度、双精度和半精度浮点格式之间的区别

    我们学过数学,都知道有理数和无理数,然后在有理数中有一类叫浮点数的数字,不知道大家对这些还有没有印象? 在软件编程的时候,我们也会用到浮点数,一种既包含小数又包含整数的数据类型. 下面就来讲讲关于浮点 ...

  9. python双精度浮点数怎么写_Python双精度浮点数运算并分行显示操作示例

    本文实例讲述了Python双精度浮点数运算并分行显示操作.分享给大家供大家参考,具体如下: #coding=utf8 def doubleType(): ''''' Python中的浮点数是双精度浮点 ...

最新文章

  1. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
  2. 设计模式学习笔记:六大原则
  3. php 自定义文件后缀,自定义更改服务器asp/php/.net等文件后缀名
  4. Port Forwarding Port Triggering
  5. 当一个有性能问题的数据库摆在你的面前,作为责任人,你的处理思路是什么?...
  6. Maven projects need to be imported反复弹出如何办?
  7. 【CMAKE系列】CMAKE外部工程引用及编译打印
  8. 前端笔记 | CSS基础
  9. linux 安装_Linux安装JDK
  10. java字符串直接比较_java中对于字符串的比较直接用“==”合适吗?
  11. 阿里云基于NVM的持久化高性能Redis数据库 1
  12. Vmware里安装 Ubuntu16.04 + 安装Vmware-tools
  13. pgadmin4工具安装及使用
  14. 什么工具可以分析php源代码,[精选]PHP性能分析工具,你在用哪一个?
  15. vue组件库和组件文档生成
  16. android 行居中,android自己定义换行居中CenterTextView(示例代码)
  17. html 图片下载浏览器默认会打开新页面预览图片解决方案
  18. 怎么更换电脑的默认浏览器?
  19. Ubuntu 20.04 源码编译Paddle2.2.2
  20. java基于微信小程序的游戏外包管理信息系统 uniapp 小程序

热门文章

  1. strcpy实现 模拟实现库函数strcpy
  2. Android SDK 加壳加固
  3. 币安链预售抢购机器人,支持pinksale、dxsale(附代码)
  4. Collector原理解析
  5. Xampp Mysql3306端口被占用
  6. VMDq (Virtual Machine Device Queue) in OpenSolaris
  7. 红米k30pro参数配置红米k30pro怎么样
  8. 一文详解双目相机标定理论
  9. Mybatis框架引入依赖
  10. linux 命名管道 mkfifo