黑马程序员技术交流社区

标题: 求助-变量赋值 [打印本页]

作者: 熊猫86    时间: 2013-10-26 12:53
标题: 求助-变量赋值
本帖最后由 熊猫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”么?为什么这个打印结果是这样的数值以及位数是如何确定的?

作者: zdrain    时间: 2013-10-26 13:32
首先声明哈,这是我的理解。
出现这个问题是计算机内存储32.3这个输的存储方式问题,float占32位这个你知道的,其中是怎么构成的呢?其实是有1位的符号位,8位的幂指位,还剩23位的数值位。
具体方式是32.3转换成2进制,取小数点后面数值并科学技术法取到幂指位,加上符号位,最后你会发现他就是你打印出来的那个数。
至于赋值问题,确实是float存给了double类型变量,因为向上转换,所以不会损失精度,a变量还是double类型
作者: 起猿    时间: 2013-10-26 13:37
这里是将float类型提升为double后,赋值给a变量,是自动提升。至于输出的数值,完全是计算机自己的问题,这个可以忽略。不是你的错误,这种事以后的开发中会经常出现。
作者: 熊猫86    时间: 2013-10-26 17:46
zdrain 发表于 2013-10-26 13:32
首先声明哈,这是我的理解。
出现这个问题是计算机内存储32.3这个输的存储方式问题,float占32位这个你知道 ...

多谢,学习了,看来浮点型的存储方式还没有学到
作者: 熊猫86    时间: 2013-10-26 17:48
起猿 发表于 2013-10-26 13:37
这里是将float类型提升为double后,赋值给a变量,是自动提升。至于输出的数值,完全是计算机自己的问题,这 ...

本以为精度提升之后应该补零的。。。
作者: 胡志翔    时间: 2013-10-26 18:26
把float类型的32.3f 转型成double类型的数据 再赋值给a , 具体结果是计算机内部的计算问题。
作者: To    时间: 2013-10-27 16:13
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
作者: 熊猫86    时间: 2013-10-27 19:45
仇邓强 发表于 2013-10-27 16:13
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释 ...

已修改,多谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2