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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏波 高级黑马   /  2013-1-10 11:40  /  4378 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


int a=10;
int b=3;
double c=a/b;
结果为什么是3 而不是3.0,不是在赋值的时候转换成 double类型的了吗

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

25 个回复

倒序浏览
应该是 double c=double(a/b)

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
王晨 来自手机 高级黑马 2013-1-10 12:25:25
藤椅
你把a,b的类型定义为double类型应该

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
结果是3.0。不是3,你搞错了。
记住一句话:
参与操作数的数据是什么类型,结果就是什么类型。操作数a、b都是int,那结果就是int。
你定义的c变量是double,而左边a/b的结果是int,这里就涉及一个概念:自动类型转换。
自动类型转换指参与运算的数据类型不同时,Java自动将精度低的数据类型转换成精度高的数据类型。只有所有参与运算的操作数统一了数据类型,才能真正进行运算。   读两遍,你就懂了。
分析:
左边c:double类型   右边结果:a/b:int类型    数据类型不同,不能做真正的运算。因此要把a/b的结果类型(int)自动的转换成double(低int→高double),是自动转换的,这样的话,那a/b就转换成double,那这样左边为double,右边为double,所以可以运算了。结果是:

QQ截图20130110122642.jpg (1.31 KB, 下载次数: 161)

QQ截图20130110122642.jpg

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
二楼正解,a/b的结果是int数据,c是double型数据,所以在赋值前要先进行强制转换。

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
不带double和带double不一样哦,才发现。

QQ截图20130110123037.jpg (8.8 KB, 下载次数: 191)

QQ截图20130110123037.jpg

QQ截图20130110123120.jpg (4.09 KB, 下载次数: 178)

QQ截图20130110123120.jpg

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
有句换没改过来:     System.out.println("带double:c="+c);
回复 使用道具 举报
楼上,我的测试和你不一样,这是.net
在处理这些类型需要转换的问题时,一定要注意计算的顺序,懂了这个顺序也就明白了结果
在 double c=a/b; 这一句代码里,它计算的顺序是:
第一步:a/b
第二步:c=第一步的结果
我们可以看到,第一步中a和b都是整形,那么计算的结果也是整形 3
第二步将3转换为double类型,这时还是3,并不会在后面增加一个小数点和零

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
田旭阳 黑马帝 2013-1-10 12:38:56
9#
double可以转换成int。反之不行吧
回复 使用道具 举报
詹卓锋 发表于 2013-1-10 12:33
不带double和带double不一样哦,才发现。

我是这么理解的
double c = a/b; 是先运算后,结果是int类型的,在赋给c double类型的,就3.0
c = double(a/b);是强制转换所以是 3.333...
不知道对不对

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
╰'宁静致远` 发表于 2013-1-10 12:41
我是这么理解的
double c = a/b; 是先运算后,结果是int类型的,在赋给c double类型的,就3.0
c = double ...

应该是,想想。
回复 使用道具 举报
刚回答错了,不好意思。
class Tiaoshi
{
        public static void main(String[] args)
        {
                int a=10;
        int b=3;
                double c=a/b;
                System.out.println(c);
        }
}
不过我调试出来的结果是3.0,你仔细检查一下。http://bbs.itheima.com/forum.php?mod=attachment&aid=MTE2NjF8ZGI2ODkxNTZlMGVlYTQwNjdmMDg0NjQ4YTg1NjI3YmR8MTczNTIyMDYwMg%3D%3D&request=yes&_f=.png

QQ截图20130110125453.png (1.22 KB, 下载次数: 219)

QQ截图20130110125453.png

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
詹卓锋 发表于 2013-1-10 12:44
应该是,想想。

我  运行 的结果是 3,不是3.0。我用 的 VS
回复 使用道具 举报
田旭阳 发表于 2013-1-10 12:38
double可以转换成int。反之不行吧

我 也是这样想的 可是 运行结果却是 3  所以很疑惑
回复 使用道具 举报
田旭阳 发表于 2013-1-10 12:38
double可以转换成int。反之不行吧

你错了 int 可以转换成double 反之这不行

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
汪叶庭 发表于 2013-1-10 12:20
应该是 double c=double(a/b)

我问 的是自动转换 不是强制
回复 使用道具 举报
詹卓锋 发表于 2013-1-10 12:44
应该是,想想。

但是我 用 vs运行的结果是 3
回复 使用道具 举报
乔培培 发表于 2013-1-10 12:38
楼上,我的测试和你不一样,这是.net
在处理这些类型需要转换的问题时,一定要注意计算的顺序,懂了这个顺 ...

我是这样想 的  可是运行结果却是3
回复 使用道具 举报
王晨 发表于 2013-1-10 12:25
你把a,b的类型定义为double类型应该

那 就不存在转换了 我研究的转换原理
回复 使用道具 举报
我想明白了 应该是这样 在将得到的结果3赋值给double类型的c时发生了隐式转换,是转换了  ,但是输出的形式还是3,这就是隐式转换
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马