您的位置:首页 > 编程语言 > Java开发

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

2013-02-25 19:13 316 查看
关于JAVA中double的问题
-------------------------------------------------------------------------------------------
近日在群中看到一个小兄弟求助:int a = 58;double b = 0.35;double c = a*b; 为什么等于20.29999999999997而不是等于20.3我在计算机思索一,是啊为什么呢?学习java两年这个问题突然不知怎么回答?经过再三考虑将我的想法发表出来,请大家一起讨论!1. 首先要明白计算机只识别0和1。2. 因为在java里面浮点数的表示是根据IEEE754标准来表示的,

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

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

一般32位、64位、80位。

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

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

这就是所谓的精度丢失,是因为小数在转二进制时有些小数是转不清的,丢去了一部分。 所以总结出来出来:再牛逼的计算机也只认识0和1!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 进制 double