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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小诺言 中级黑马   /  2013-7-23 21:12  /  2030 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    今天偶然想起前几天看的视频,
int a=10,b=3;
double c=a/b;
Console.WriteLine("输出c:{0}",c);
结果输出c是3 而不是3.0,c不是应该是小数吗?

13 个回复

倒序浏览
因为 a/b是一个整形。你可以让a
回复 使用道具 举报
有一是double就行
回复 使用道具 举报
你可以使用String.Format()来显示保留1位小数
            int a = 10, b = 3;
            double c = a / b;
            string string_c = c.ToString("0.0");
            Console.WriteLine("输出c:{0}", string_c);
            Console.ReadKey();
回复 使用道具 举报
调试时 c的值确实为3.0,但控制台输出时确实为3,按我理解,这只能说明double型的数据在控制台显示时取消了小数位即“0”的显示。。
回复 使用道具 举报 1 0
本帖最后由 黑骏马 于 2013-7-24 22:33 编辑

类型自动转换规则:
算术运算和赋值运算,参与运算的两个操作数的类型必须相同,运算后的结果的类型也相同。
如果操作数的类型不相同,满足下面条件时,系统自动完成类型转换:
1两种类型兼容,如int与double,double>int,自动转换为double
2对于表达式,如果一个操作数为double型,则整个表达式可提升为double型

int a=10,b=3;
double c=a/b;
存在一个数据类型自动转换,(错误:c被自动转换为int型了 。)   c由int型被自动转换为double型了
如果要得到c为小数的结果,可以根据两个条件,加一个double型操作数1.0
double c=1.0*a/b
这样a,b就被自动转换为double型,结果c也是double型了。
---------------------------------
补充:
double c=a/b;          // c由int型的3转换为double型的3.0,输出时因为WriteLine()调用ToString()所以显示为3
double c=1.0*a/b   // a和b先被转换为double型,结果c为3.333……,输出显示也是3.3333333333……
回复 使用道具 举报
WriteLine()会调用double的ToString()方法,所以输出为3而不是3.0
回复 使用道具 举报
张林杰 发表于 2013-7-23 22:08
调试时 c的值确实为3.0,但控制台输出时确实为3,按我理解,这只能说明double型的数据在控制台显示时取消了 ...

同意同学的观点,但是那样精度是不是有问题啊。
回复 使用道具 举报
但是c是double型啊,输出整型精度有没有问题啊,
回复 使用道具 举报
brucel50 发表于 2013-7-24 08:06
WriteLine()会调用double的ToString()方法,所以输出为3而不是3.0

这位同学说的对,对于Console .WriteLine  (Double),value 的文本表示形式通过调用 Double .ToString 方法生成。
回复 使用道具 举报
Console.WriteLine("{0}",num);
走到这句的时候 num 还是3.0 所以输出是3 就跟这个WriteLine方法有关系了
用.NET Reflector 软件看WriteLine源码

Out.WriteLine(value);

this.Write(value);


this.FormatProvider

在这边按照当前或者国际标准格式化了吧...

回复 使用道具 举报
整数与整数相除 得到的只能是整数 如果你想要 小数的话
这样  
double c=a*1.0/b;
这样你就会得到一个小数
回复 使用道具 举报
因为你定义的a和b都是整型的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马