黑马程序员技术交流社区

标题: 第一次提问,初学者一枚 [打印本页]

作者: 别问我是谁    时间: 2014-6-12 16:53
标题: 第一次提问,初学者一枚
刚开始自己视频,希望大家不要嫌弃我问题太简单就好:handshake
            int a = 10, b = 3;
            double mod = (1.0*a)%b;
            Console.WriteLine(mod);
            Console.ReadKey();
这个出来后的结果是3,Double类型的不是应该显示3.0才对吗?

作者: 别问我是谁    时间: 2014-6-12 16:54
刚开始看视频没多久,看到这一个小疑问,来寻求答案
作者: 马林雷    时间: 2014-6-12 17:09
你的%是求余数,除以用/
作者: 陈君    时间: 2014-6-12 17:39
%是取余,除号应该是/
作者: 夜猫子进宅    时间: 2014-6-12 17:42
运算符号你搞错了,换个符号,就行了
            int a = 10, b = 3;            
            double mod =(double) (1.0 * a) / b;
            Console.WriteLine(mod);           
            Console.ReadKey();
作者: 别问我是谁    时间: 2014-6-12 19:23
夜猫子进宅 发表于 2014-6-12 17:42
运算符号你搞错了,换个符号,就行了
            int a = 10, b = 3;            
            double mod ...

用强制转换?  1.0*a   不是就已经隐式转换成double类型了吗
作者: 别问我是谁    时间: 2014-6-12 19:25
陈君 发表于 2014-6-12 17:39
%是取余,除号应该是/

就是求取余。取余的话,double类型的整数不显示成1.0类型的数字吗
作者: 别问我是谁    时间: 2014-6-12 19:26
马林雷 发表于 2014-6-12 17:09
你的%是求余数,除以用/

就是求取余。取余的话,double类型的整数不显示成1.0类型的数字吗
作者: 陈君    时间: 2014-6-12 19:42
取余是只真对整数进行运算的,所以你虽然*1.0但是系统还是会把你转成整数的
作者: 天道酬勤_||淡腾    时间: 2014-6-12 23:12
  double mom = 1.000;
             double xx = 1.002;
             Console.WriteLine(xx);
             Console.WriteLine(mom);



结果你输出看看   


1.0*10=10   10%3=1


作者: 别问我是谁    时间: 2014-6-13 10:02
陈君 发表于 2014-6-12 19:42
取余是只真对整数进行运算的,所以你虽然*1.0但是系统还是会把你转成整数的 ...

谢谢了,原来是系统默认转换的呀,知道了
作者: 别问我是谁    时间: 2014-6-13 10:03
天道酬勤_||淡腾 发表于 2014-6-12 23:12
double mom = 1.000;
             double xx = 1.002;
             Console.WriteLine(xx);

嗯,确实。前面默认显示成整数。那就是程序就这么设定的了。。这下知道了。。谢谢了
作者: 点石fanfl    时间: 2014-6-13 16:37
别问我是谁 发表于 2014-6-13 10:02
谢谢了,原来是系统默认转换的呀,知道了

C语言中取余运算符两边必须都为整型,但是在C#中不存在这种约束,不信楼主可以再程序中输入以下语句:
Console.WriteLine("==============================");
            Console.WriteLine(5 % 2);       // int
            Console.WriteLine(-5 % 2);      // int
            Console.WriteLine(5.0 % 2.2);   // double
            Console.WriteLine(5.0m % 2.2m); // decimal
            Console.WriteLine(-5.2 % 2.0);  // double
            Console.WriteLine("==============================");
作者: 点石fanfl    时间: 2014-6-13 16:41
运算结果是double类型的,楼主如果不信可以将程序中的double类型改成int,运行程序会报错。
            int a = 10, b = 3;
            double mod = (1.0 * a) % b;
            Console.WriteLine(mod);
    改成
            int a = 10, b = 3;
            int mod = (1.0 * a) % b;
            Console.WriteLine(mod);
至于为什么会输出1,而不输出1.0,我想C#默认不输出.0
楼主可以输入以下程序验证:
            double xx = 1.00;
            Console.WriteLine(xx);

作者: 专属第三    时间: 2014-6-13 16:59
这里是不是因为.0都不会显示呢?
作者: czwanglei    时间: 2014-6-13 18:40
本帖最后由 czwanglei 于 2014-6-13 18:49 编辑

你这个结果,mod是1.0,但是用console.writeline(mod)打印出来为1。。默认不输出.0

作者: The_Enternal    时间: 2014-6-13 21:44
取余的结果就是3,你定义的mod是double型,只是能够接受int型和double型的数据而已,不会默认将int型数据进行类型转换!
作者: 小米    时间: 2014-6-14 23:52
数据转换为string类型的输出时,系统会自动进行整理,整型会舍弃小数点后部分,浮点数会保留小数点后两位。
作者: 傅磊    时间: 2014-8-4 11:21
%运算符是求余数的,余数是正数.得到的结果是3而不是3.0,就如double a=1时输出结果也会是1而不是1.0
作者: 官方    时间: 2014-9-19 09:19
得到正解 输出的是double类型的 但是取余出来的肯定是整数 但是后面的.0就算是个1.0输出的时候也会默认把.0去掉的
作者: sadfgood    时间: 2014-9-19 19:02
学习了.




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