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

© 李君言 中级黑马   /  2013-5-12 22:59  /  1532 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李君言 于 2013-5-13 11:56 编辑

int a = 10 / 3;
double b = 10 / 3;         为什么这样写b的值是3而不是3.33333333呢?
double b = 10.0 / 3;      怎么样能只保留两位小数?

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

4 个回复

倒序浏览
在c#中除法默认不保留小数点,

decimal result = 100 / 1000; // result = 0;

需要保留小数点,可以如下

decimal result = 100m / 1000;

m代表decimal.

如果是变量要如何处理呢?这是需要用到Math.Round()

int x= 120;

int y= 100000;

decimal result = (decimal)x / y; // (decimal)x/ y 表示把 x 转换成decimal再做除法运算,int 除 int 是会丢失小数点的。

不过这样的小数点后面的数太多了,需要处理下,这时候需要Math.Round()

decimal result = Math.Round((decimal)x/ y,2); 后面的2表示保留小数点后2位小数   
网上找的 希望有用
回复 使用道具 举报
本帖最后由 王宝生 于 2013-5-13 07:54 编辑

int  a=10/3;没什么好说的,结果是3.
double b=10/3;这里10和3都是int,所以做的是int类型的除法,相当于和上面的一样,结果仍然是一个int,只不过他最后把int赋值给了double。
double c=10.0/3;这里10.0是浮点类型了,一个浮点类型和一个int类型做运算要涉及到转型,所以int类型的3会首先转换成double类型的3.0。最终做的是10.0/3.0等于3.333333....。
那么要想将这个3.3333.......只保留两位数,需要用到一个函数Math.Round(double,int),这里第一个参数是要舍入的double值,第二个参数是要保留的小数尾数,想保留两位小数可以这样写:double result=Math.Round(c,2);

***************************
多说一点,事实上,如果我们直接在源代码中写这样的运算,double c=10/3。编译器在编译的时候就会将其优化成double c=3;而不会去等到运行时在计算。
***************************
回复 使用道具 举报
double b = 10 / 3;
这几句先执行的是10/3 因为整数除以整数 还是整数
所以10/3=3  
然后这时候结果才赋给b 所以b的值是3

double b = 10.0 / 3;   这里跟上面一样 因为小数除以整数 还是小数 所以10.0/3=3.3333333
然后把结果付给b
至于保留两位小数  可以调用double result=Math.Round(b,2)

然后输出result即可
回复 使用道具 举报
{//无码无真相, 废话不多说, 直接给你上例子吧
    class Program
    {
        static void Main(string[] args)
        {
            
            int a = 10 / 3;
            //double b = 10 / 3;     //这样写会直接报错的, 正确的写法是int b=10/3; 然后再强制转换成double类型
            double c = 10.0 / 3;     //想要保留两位的话当然是取余了
            Console.WriteLine(a);
            //Console.WriteLine(b);  //会报错,直接注释掉
            Console.WriteLine(c);
            Console.ReadKey();
        }
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马