A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊猫86 中级黑马   /  2013-10-26 12:53  /  1543 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 熊猫86 于 2013-10-27 19:45 编辑

新人求助

class Demo
{
        public static void main(String[] args)
        {
                double a=32.3f;
                System.out.println("a="+a);
        }
}

输出结果为32.29999923706055
请问各位大神,“double a=32.3f;”这句话的意思是“将32.3这个float型的数值赋给一个double型的a”么?为什么这个打印结果是这样的数值以及位数是如何确定的?

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
首先声明哈,这是我的理解。
出现这个问题是计算机内存储32.3这个输的存储方式问题,float占32位这个你知道的,其中是怎么构成的呢?其实是有1位的符号位,8位的幂指位,还剩23位的数值位。
具体方式是32.3转换成2进制,取小数点后面数值并科学技术法取到幂指位,加上符号位,最后你会发现他就是你打印出来的那个数。
至于赋值问题,确实是float存给了double类型变量,因为向上转换,所以不会损失精度,a变量还是double类型

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这里是将float类型提升为double后,赋值给a变量,是自动提升。至于输出的数值,完全是计算机自己的问题,这个可以忽略。不是你的错误,这种事以后的开发中会经常出现。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
zdrain 发表于 2013-10-26 13:32
首先声明哈,这是我的理解。
出现这个问题是计算机内存储32.3这个输的存储方式问题,float占32位这个你知道 ...

多谢,学习了,看来浮点型的存储方式还没有学到
回复 使用道具 举报
起猿 发表于 2013-10-26 13:37
这里是将float类型提升为double后,赋值给a变量,是自动提升。至于输出的数值,完全是计算机自己的问题,这 ...

本以为精度提升之后应该补零的。。。
回复 使用道具 举报
把float类型的32.3f 转型成double类型的数据 再赋值给a , 具体结果是计算机内部的计算问题。
回复 使用道具 举报
To 金牌黑马 2013-10-27 16:13:45
7#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
仇邓强 发表于 2013-10-27 16:13
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释 ...

已修改,多谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马