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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈世伟 黑马帝   /  2012-4-4 09:14  /  3866 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a = 10,b=3;
double quo = a / b;
console.writeline(quo);
quo是double类型的,为什么运行的结果是3,而不是3.0呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

17 个回复

倒序浏览
因为你参与运算的数据类型都是整形的,所以运算结果也是整形的数!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
关于double中尾随零问题,因为浮点数据类型没有尾随零字符的任何内部表示形式。 例如,这些数据类型不区分 4.2000 和 4.2。因此,在显示或输出浮点值时,所以尾随零字符不会出现。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报

int a = 10,b=3;
double quo = a / b;
console.writeline(quo);

算数表达式两边参与运算的都是int类型,所以得到的结果也是int类型
double quo = a / b;
想得到double类型
double quo = a*1.0 / b;多种方法

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
a和b都是整型变量,在计算时,两边都是整型,那么计算结果就是整型

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
在java中可能是3.0,但是在c#中它后面的0被默认去掉了,例如:把你的代码改为:
int i = 7;
            int j = 2;
            double a =3.0;
            Console.WriteLine(a);
            Console.ReadKey();
它输出的还是3,如果把double a=3.0,改为3.50的话那么a输出的就是3.5跟前面的int型没关系。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int a = 10,b=3;
double quo =(double) a / b;
console.writeline(quo);

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
隐式转换了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int a = 10,b=3,a,b都是整型,结果也会是整型的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
算数表达式两边参与运算的都是int类型,所以得到的结果也是int类型
如果将double quo = a / b改成double quo =(double) a / b;
得到的结果也是3.33333333333333并不是3.0

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
qvo 是double型的 qvo=3.0 在快速监视中可以看到 计算的数据类型和结果是相同的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
比如说你定义的一个double 类型 double a =10,这样是对的。
           你在计算的时候a和b都是整数类型,两者相处后结果肯定也是int类型,运算后的结果是给c赋值了,并不是把运算的结果进行转换,所以说还是3,如果你想变成带有小数部分的,那你就可以把计算的结果就行转换double c =(double)10/3,这样的话计算的结果就会是3.33333333333333了。这样说你明白了么?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
看看我给你的图!!    或许你就知道了……

aaa.jpg (32.51 KB, 下载次数: 125)

aaa.jpg

az.jpg (37.11 KB, 下载次数: 119)

az.jpg

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
因为定义的变量a和b都是int类型的,在计算a/b时,这个表达式的值就为3,这个时候还是int类型,然后赋给double类型的变量quo,就会进行隐式转换,
值3的类型就会转换成double类型,输出的3是double类型,只是看起来是int类型。
假如改成这样:double quo = (a*1.0)/b,等号右边的int类型就会提升为double类型,这样表达式的值为3.33333333333333而不是3。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
因为参与运算的两边元素都是整形,所以得到得到的结果也是整形3
int类型向double类型转换时发生自动转换不丢失精度
相当于对double类型的quo直接赋值一个整形数据3

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
注释:
int a = 10,b=3;    //定义两整形的常量a,b;
double quo = a / b;  //double quo定义的事quo的数据类型为Double型,并此语句只是两整数运算,结果必然是int,若非要得到3.0,即下面执行语句可执行成功:
public static String getFormatDouble(double quo)
{
DecimalFormat df=new DecimalFormat("0.0");
        return df.format(quo);
}
回复 使用道具 举报
原因是 a和b都是int型的,所以a/b的结果也是int型的,然后把一个整形的结果赋值给double型,所以quo的值为3
回复 使用道具 举报
先执行int类型的除法运算a/b,其值为3,再把int类型转为double类型,其值quo为3.0,输出时,在标准输出流中为3
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马