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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 别问我是谁 中级黑马   /  2014-6-12 16:53  /  2578 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚开始自己视频,希望大家不要嫌弃我问题太简单就好:handshake
            int a = 10, b = 3;
            double mod = (1.0*a)%b;
            Console.WriteLine(mod);
            Console.ReadKey();
这个出来后的结果是3,Double类型的不是应该显示3.0才对吗?

20 个回复

倒序浏览
刚开始看视频没多久,看到这一个小疑问,来寻求答案
回复 使用道具 举报
你的%是求余数,除以用/
回复 使用道具 举报
%是取余,除号应该是/
回复 使用道具 举报
运算符号你搞错了,换个符号,就行了
            int a = 10, b = 3;            
            double mod =(double) (1.0 * a) / b;
            Console.WriteLine(mod);           
            Console.ReadKey();
回复 使用道具 举报
夜猫子进宅 发表于 2014-6-12 17:42
运算符号你搞错了,换个符号,就行了
            int a = 10, b = 3;            
            double mod ...

用强制转换?  1.0*a   不是就已经隐式转换成double类型了吗
回复 使用道具 举报
陈君 发表于 2014-6-12 17:39
%是取余,除号应该是/

就是求取余。取余的话,double类型的整数不显示成1.0类型的数字吗
回复 使用道具 举报
马林雷 发表于 2014-6-12 17:09
你的%是求余数,除以用/

就是求取余。取余的话,double类型的整数不显示成1.0类型的数字吗
回复 使用道具 举报
陈君 金牌黑马 2014-6-12 19:42:15
9#
取余是只真对整数进行运算的,所以你虽然*1.0但是系统还是会把你转成整数的
回复 使用道具 举报
  double mom = 1.000;
             double xx = 1.002;
             Console.WriteLine(xx);
             Console.WriteLine(mom);



结果你输出看看   


1.0*10=10   10%3=1

回复 使用道具 举报
陈君 发表于 2014-6-12 19:42
取余是只真对整数进行运算的,所以你虽然*1.0但是系统还是会把你转成整数的 ...

谢谢了,原来是系统默认转换的呀,知道了
回复 使用道具 举报
天道酬勤_||淡腾 发表于 2014-6-12 23:12
double mom = 1.000;
             double xx = 1.002;
             Console.WriteLine(xx);

嗯,确实。前面默认显示成整数。那就是程序就这么设定的了。。这下知道了。。谢谢了
回复 使用道具 举报
别问我是谁 发表于 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("==============================");
回复 使用道具 举报
运算结果是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);

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2 描述最准确

查看全部评分

回复 使用道具 举报
这里是不是因为.0都不会显示呢?
回复 使用道具 举报
本帖最后由 czwanglei 于 2014-6-13 18:49 编辑

你这个结果,mod是1.0,但是用console.writeline(mod)打印出来为1。。默认不输出.0
回复 使用道具 举报
取余的结果就是3,你定义的mod是double型,只是能够接受int型和double型的数据而已,不会默认将int型数据进行类型转换!
回复 使用道具 举报
数据转换为string类型的输出时,系统会自动进行整理,整型会舍弃小数点后部分,浮点数会保留小数点后两位。
回复 使用道具 举报
%运算符是求余数的,余数是正数.得到的结果是3而不是3.0,就如double a=1时输出结果也会是1而不是1.0
回复 使用道具 举报
得到正解 输出的是double类型的 但是取余出来的肯定是整数 但是后面的.0就算是个1.0输出的时候也会默认把.0去掉的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马