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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


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

评分

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

查看全部评分

25 个回复

正序浏览
本帖最后由 ﹏_、 于 2013-1-30 22:14 编辑

这个程序的过程我知道先是两个整形的进行运算出来之后是3之后在赋值给c的时候自动隐形转换成double类型~~·之后我把程序改了一下直接输出一个double类型的变量出来的还是一个不带小数点的整数,之后我又把那个double类型的数变成9.0在输出还是9我觉的可能是因为这个C#中的double类型如果不带小数位输出的可能就是这个样子~~

QQ截图20130130220823.png (3.46 KB, 下载次数: 44)

QQ截图20130130220823.png

QQ截图20130130221116.png (6 KB, 下载次数: 43)

QQ截图20130130221116.png
回复 使用道具 举报
如果a和b其中任意一个是double类型的,系统会把另一个转换成double类型,然后计算。此题中a和b都是int类型,计算结果应该是int类型,c是double类型的,系统会将a/b的结果自动转换成double类型,赋给c。
回复 使用道具 举报
右边的是a/b,所以先在内存中得到的结果是3,然后转换为double类型,结果还是3
回复 使用道具 举报
int a=10;
int b=3;
double c=1.0a/b
这样写就行了
回复 使用道具 举报
跟运算的类型有关,a和b都是int类型,所以10/3=3
苏坤老师基础里面的视频讲到这题!!!!
回复 使用道具 举报
苏波 发表于 2013-1-10 13:14
但是我 用 vs运行的结果是 3

.net 和 java的 类型转换应该是有差别的,具体还是要了解下。
回复 使用道具 举报
我想明白了 应该是这样 在将得到的结果3赋值给double类型的c时发生了隐式转换,是转换了  ,但是输出的形式还是3,这就是隐式转换
回复 使用道具 举报
王晨 发表于 2013-1-10 12:25
你把a,b的类型定义为double类型应该

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

我是这样想 的  可是运行结果却是3
回复 使用道具 举报
詹卓锋 发表于 2013-1-10 12:44
应该是,想想。

但是我 用 vs运行的结果是 3
回复 使用道具 举报
汪叶庭 发表于 2013-1-10 12:20
应该是 double c=double(a/b)

我问 的是自动转换 不是强制
回复 使用道具 举报
田旭阳 发表于 2013-1-10 12:38
double可以转换成int。反之不行吧

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

评分

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

查看全部评分

回复 使用道具 举报
田旭阳 发表于 2013-1-10 12:38
double可以转换成int。反之不行吧

我 也是这样想的 可是 运行结果却是 3  所以很疑惑
回复 使用道具 举报
詹卓锋 发表于 2013-1-10 12:44
应该是,想想。

我  运行 的结果是 3,不是3.0。我用 的 VS
回复 使用道具 举报
刚回答错了,不好意思。
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=MTE2NjF8NzZlMWEzZTk3NTc3YWNlYmI1YWUyZTE5MjU1YTAzYzB8MTczMTU1ODc1NA%3D%3D&request=yes&_f=.png

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

QQ截图20130110125453.png

评分

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

查看全部评分

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

应该是,想想。
回复 使用道具 举报
詹卓锋 发表于 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:38:56
9#
double可以转换成int。反之不行吧
回复 使用道具 举报
楼上,我的测试和你不一样,这是.net
在处理这些类型需要转换的问题时,一定要注意计算的顺序,懂了这个顺序也就明白了结果
在 double c=a/b; 这一句代码里,它计算的顺序是:
第一步:a/b
第二步:c=第一步的结果
我们可以看到,第一步中a和b都是整形,那么计算的结果也是整形 3
第二步将3转换为double类型,这时还是3,并不会在后面增加一个小数点和零

评分

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

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马