黑马程序员技术交流社区

标题: 算术运算 [打印本页]

作者: 小诺言    时间: 2013-7-23 21:12
标题: 算术运算
    今天偶然想起前几天看的视频,
int a=10,b=3;
double c=a/b;
Console.WriteLine("输出c:{0}",c);
结果输出c是3 而不是3.0,c不是应该是小数吗?

作者: 小周学诚    时间: 2013-7-23 21:30
因为 a/b是一个整形。你可以让a
作者: 小周学诚    时间: 2013-7-23 21:31
有一是double就行
作者: brucel50    时间: 2013-7-23 21:40
你可以使用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();
作者: 张林杰    时间: 2013-7-23 22:08
调试时 c的值确实为3.0,但控制台输出时确实为3,按我理解,这只能说明double型的数据在控制台显示时取消了小数位即“0”的显示。。

作者: 黑骏马    时间: 2013-7-23 23:03
本帖最后由 黑骏马 于 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……

作者: brucel50    时间: 2013-7-24 08:06
WriteLine()会调用double的ToString()方法,所以输出为3而不是3.0
作者: 小诺言    时间: 2013-7-24 08:38
张林杰 发表于 2013-7-23 22:08
调试时 c的值确实为3.0,但控制台输出时确实为3,按我理解,这只能说明double型的数据在控制台显示时取消了 ...

同意同学的观点,但是那样精度是不是有问题啊。
作者: 小诺言    时间: 2013-7-24 08:39
但是c是double型啊,输出整型精度有没有问题啊,
作者: 张林杰    时间: 2013-7-24 10:11
brucel50 发表于 2013-7-24 08:06
WriteLine()会调用double的ToString()方法,所以输出为3而不是3.0

这位同学说的对,对于Console .WriteLine  (Double),value 的文本表示形式通过调用 Double .ToString 方法生成。
作者: 彭家贰小姐    时间: 2013-7-24 17:09
Console.WriteLine("{0}",num);
走到这句的时候 num 还是3.0 所以输出是3 就跟这个WriteLine方法有关系了
用.NET Reflector 软件看WriteLine源码

Out.WriteLine(value);

this.Write(value);


this.FormatProvider

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


作者: ww448483689    时间: 2013-7-26 22:45
整数与整数相除 得到的只能是整数 如果你想要 小数的话
这样  
double c=a*1.0/b;
这样你就会得到一个小数
作者: 殘遛の丶狳味    时间: 2013-8-2 21:13
因为你定义的a和b都是整型的




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