dv是什么,可不可以把全部代码给出。这儿dv是关键,所以必须知道它是什么,数据从哪里来。

解决方案 »

  1.   


     我试了一下,结果是 246 呀 !  double mResidualSum = 282.9;
    string st="36.9"; double m=mResidualSum-double.Parse(st);
    textBox1.Text=m.ToString(); //返回显示246
      

  2.   


     是不是从数据库取出的 double.Parse(dv[i]["OutSum"].ToString() 的值不是 36.9 ??
      

  3.   

    Double是浮点型数据,转化的时候可能不是特别匹配,所以在C有这样的用法///
    static bool equal(const double & l, const double & r)
     {
      static double precision = 0.000000001;
      return (l - r < precision);
     }
    };
    而C#则封装以后提供了
    Double.Equals(d1,d2);
    所以在使用中要注意取位
    //另外我觉得这里用Convert好一些,只转化一次,(个人观点)
    mResidualSum = mResidualSum - Convert.ToDouble(dv[i]["OutSum"]);mResidualSum = System.Math.Round(mResidualSum,4);
      

  4.   

    知道吗,对于Convert.ToDouble(Object value)方法,当传进的参数是String类型时,实际上它还是调用Double.Parse方法来实现的。所以用Convert跟用Double是一样的。不能说用Convert好,只是它方便一些。
      

  5.   

    dv是个dataview,该计算是在一个循环里,循环结束后,误差较大
    直接在命令窗口输入? 282.9 -36.9
    结果不是246!
      

  6.   

    这个问题肯定是数据库中的字段值有精度误差;可以通过Parse或其他的Format函数解决,或是解决数据库源头的问题。不同意gujianxin(木头象)的做法,要充分利用类库
      

  7.   

    double d=2.34
    double.parse(d.ToString())==d->false
      

  8.   

    double d=2.34;
    Console.WriteLine(double.Parse(d.ToString())==d);
    在1.1版本测出来的结果是true,所以不要误导别人。
      

  9.   

    //double 是 浮点型数据,其实它并不是保存精确的值,而只是一个近似值,所以才叫做双精度浮点型,不过是精度更高,但不是100%,所以它的有偏差是毫无疑问的,不过值很小而已。。
    double d = 0.0;
    for (int i=0 ; i < 40; i++)
    {
    d += 2.2;
    Console.WriteLine("Result = {0}",d);
    }
    Result = 2.2
    Result = 4.4
    Result = 6.6
    Result = 8.8
    Result = 11
    Result = 13.2
    Result = 15.4
    Result = 17.6
    Result = 19.8
    Result = 22
    Result = 24.2
    Result = 26.4
    Result = 28.6
    Result = 30.8
    Result = 33
    Result = 35.2
    Result = 37.4
    Result = 39.6
    Result = 41.8
    Result = 44
    Result = 46.2
    Result = 48.4
    Result = 50.6
    Result = 52.8
    Result = 55
    Result = 57.2
    Result = 59.4
    Result = 61.6
    Result = 63.8
    Result = 66
    Result = 68.2
    Result = 70.4
    Result = 72.6
    Result = 74.8
    Result = 77
    Result = 79.2
    Result = 81.4
    Result = 83.6000000000001
    Result = 85.8000000000001
    Result = 88.0000000000001
      

  10.   

    对比一下float的精度 float f = 0.0f;
    for (int i=0 ; i < 40; i++)
    {
    f += 2.2f;
    Console.WriteLine("Result = {0}",f);
    }Result = 2.2
    Result = 4.4
    Result = 6.6
    Result = 8.8
    Result = 11
    Result = 13.2
    Result = 15.4
    Result = 17.6
    Result = 19.8
    Result = 22
    Result = 24.2
    Result = 26.4
    Result = 28.6
    Result = 30.8
    Result = 33
    Result = 35.2
    Result = 37.40001
    Result = 39.60001
    Result = 41.80001
    Result = 44.00001
    Result = 46.20001
    Result = 48.40001
    Result = 50.60001
    Result = 52.80001
    Result = 55.00001
    Result = 57.20001
    Result = 59.40001
    Result = 61.60001
    Result = 63.80001
    Result = 66.00002
    Result = 68.20001
    Result = 70.40001
    Result = 72.60001
    Result = 74.8
    Result = 77
    Result = 79.2
    Result = 81.39999
    Result = 83.59999
    Result = 85.79999
    Result = 87.99998
      

  11.   

    是有这个问题,我遇到好多次,而且居然还有 x.xx-y.yy-z.zz =0.00000000000mm  的情况,天啊,心算都知道应该是0