黑马程序员技术交流社区

标题: 除法的小问题 [打印本页]

作者: 李君言    时间: 2013-5-12 22:59
标题: 除法的小问题
本帖最后由 李君言 于 2013-5-13 11:56 编辑

int a = 10 / 3;
double b = 10 / 3;         为什么这样写b的值是3而不是3.33333333呢?
double b = 10.0 / 3;      怎么样能只保留两位小数?
作者: 陈行    时间: 2013-5-12 23:08
在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:53
本帖最后由 王宝生 于 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;而不会去等到运行时在计算。
***************************
作者: 曾大鹏    时间: 2013-5-13 10:33
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即可

作者: 葛杨杨    时间: 2013-5-15 00:59
{//无码无真相, 废话不多说, 直接给你上例子吧
    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();
        }
    }




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