随便定义一个double型变量
double x = 123.456789123456;
x = Math.Round(x, 3);
最后得出的x仍然为123.456789123456  没有实现取3位小数 这是怎么回事?

解决方案 »

  1.   


    private void button5_Click(object sender, EventArgs e)
    {
        double x = 123.456789123456;   //非准确数
        x = Math.Round(x, 3);    decimal y = 123.456789123456M; //准确数
        y = Math.Round(y, 3);          //结果是三位小数 123.456

      

  2.   

    没问题!
                double x = 123.456789123456;
                x = Math.Round(x, 3);
                Console.WriteLine(x); // 123.457
      

  3.   

    算了 我把源码贴出来把
    //得到一个double类型的数 类似于123.456789123456
    double x = k * p.Y + d;
    //然后我想取3位小数
    x = Math.Round(x, 3);
    运行到这发现x值没变   很无奈。。
      

  4.   

    我改成decimal o = Math.Round(1037.9119873046875m, 3); 他就好用
    我无语了 double类型不好用
      

  5.   

    VS里的是DECIMAL和数据库中的FLOAT是不同的。DECIMAL更小,有时会出现不准确的现象
      

  6.   


    decimal x1 = (decimal)1037.9119873046875;
    x1 = Math.Round(x1, 3);
    这时x1 = 1037.912
    double x = (double)x1;
    这时x = 1037.9119873046875
    Math.Round这个方法叫我很无语
      

  7.   

    非准确数不可以用Math.Round方法取小数位是吧
      

  8.   

    vs2008里很正常
    decimal x1 = (decimal)1037.9119873046875; 
    x1 = Math.Round(x1, 3);
    Console.Write(x1+"\n");
    double x = (double)x1;
    Console.Write(x);
    1037.912
    1037.912