JAVA基础中关于double进制问题的解析

本文探讨了Java中浮点数运算出现精度误差的原因。通过具体示例解释了IEEE754标准下浮点数表示的原理及小数转换为二进制时产生的精度损失现象。
近日在群中看到一个小兄弟求助:
int a = 58;double b = 0.35;
double c = a*b;
为什么等于20.29999999999997
而不是等于20.3
我在计算机思索一,是啊为什么呢?学习java两年这个问题突然不知怎么回答?经过再三考虑将我的想法发表出来,请大家一起讨论!
1. 首先要明白计算机只识别01
2. 因为在java里面浮点数的表示是根据IEEE754标准来表示的,


一般数符位(s1位,阶码(E)根据浮点数的类型不同占的位数不同,尾数(M)也是


根据类型不同占的位数不一样,所以一个计算机能够表示的浮点数的总位数长度是有限的


一般32位、64位、80位。


3. 要明白小数在转换为二进制的时候有些小数是无法完全转换的只能取近似值。


4. 如0.35转为二进制为0.01100..........这个二进制再转10进制是无法表示为0.35的只能是无限接近0.35.



这就是所谓的精度丢失,是因为小数在转二进制时有些小数是转不清的,丢去了一部分。

所以总结出来出来:再牛逼的计算机也只认识01











本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1140059,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值