聊聊Java中浮点丢失精度的事

本文详细解释了十进制到二进制的转换过程,特别关注了小数部分的处理,介绍了IEEE754规范在浮点数表示中的应用,以及BigDecimal类在处理精度问题,尤其是equals和compareTo方法中的作用,强调了标度(scale)在精确计算中的关键作用。
摘要由CSDN通过智能技术生成

在说这个之前,我们先看看十进制到二进制的转换过程

整数的十进制到二进制的转换过程

用白话说这个过程就是不断的除2,得到商继续除,直到商小于1为止,然后他每次结果的余数倒着排列出来就是它的二进制结果了,直接上图

整数十进制转二进制.jpg

说一下为什么倒着排列就是二进制结果哈

通俗点说就是整数是一步一步除下来的,那回去不得一步一步乘上去?也就是说从上到下就是二进制从低位到高位的过程。

小数十进制到二进制的转换过程

小数的十进制到二进制的转换其实和整数类似,只不过算的方式变成了乘法,也就是用小数不断的乘2,然后得到的结果的整数部分拿出来,接着剩下的小数部分继续乘2,直到小数部分为0为止,直接上图~

小数十进制转二进制过程(不循环).jpg

二进制结果中的二分之一是转换后的,其实就是2的-1次方,-2次方。。。

当然了,小数转二进制的过程中,很多情况下都是无尽的,接着上图

小数十进制转二进制过程(循环).jpg

所以可以看到这样的循环下去是得不到二进制的结果的,所以计算机就要进行取舍。也就是IEEE 754规范

IEEE 754规范

IEEE 754规定了四种标识浮点数值的方式,单精确度(32位),双精确度(64位),延伸单精确度(43比特以上,很少用)和延伸双精确度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值