博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA基础中关于double进制问题的解析
阅读量:6937 次
发布时间:2019-06-27

本文共 554 字,大约阅读时间需要 1 分钟。

近日在群中看到一个小兄弟求助:
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,如需转载请自行联系原作者
你可能感兴趣的文章
要看的
查看>>
我的Git忽略文件
查看>>
Maven学习总结(六)——Maven与Eclipse整合
查看>>
我的友情链接
查看>>
深入浅出CChart 每日一课——第九课 实时数据显示,期中考试
查看>>
深入浅出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼
查看>>
SpringMVC权限管理
查看>>
nginx Etag模块
查看>>
Oracle操作的部分ddl语句
查看>>
tune2fs指令
查看>>
Windows Server 8任务管理新功能
查看>>
博文测试
查看>>
PHP字符串转二进制(支持混合字符串)
查看>>
Excel 中使用SQL 语句查询数据(四)
查看>>
java开发中的23种设计模式详解 [转]
查看>>
Linux上vi(vim)编辑器使用教程
查看>>
C#设计模式之职责链
查看>>
Git使用基础篇
查看>>
序列动作Sequence
查看>>
centos下安装lua环境
查看>>