我的情况是这样的double d1 = 7918.2;
double d2 = 0.48;double d3 = d1+d2 = 7918.6799999999994;为什么会出现那么长的小数位呢?愁死人了

解决方案 »

  1.   

    用decimal就可以了,那个是精度问题,你介意的话就别用那个数据类型。
      

  2.   

    自从被 double 精度坑了之后, 现在是能不用 double就不用。
      

  3.   

    你想需要多长?decimal小数类型来自己取!
      

  4.   

    Double test1 = 1000.0;
    Double test2 = 1000.12345;
    Double test3 = 1000.1289;
    Int test4 = 1000;
    string test5 = "1000";
    string test6 = "1000.12345";
    string test7 = "1000.1289"Convert.ToDouble(test1).ToString("0.00");//保留小数点后两位,结果为1000.00
    Convert.ToDouble(test2).ToString("0.00");//保留小数点后两位,结果为1000.12
    Convert.ToDouble(test3).ToString("0.00");//保留小数点后两位,结果为1000.13
    Convert.ToDouble(test4).ToString("0.00");//保留小数点后两位,结果为1000.00
    Convert.ToDouble(test5).ToString("0.00");//保留小数点后两位,结果为1000.00
    Convert.ToDouble(test6).ToString("0.00");//保留小数点后两位,结果为1000.12
    Convert.ToDouble(test7).ToString("0.00");//保留小数点后两位,结果为1000.13  
      

  5.   


    double的精度是不是很不稳定啊,同样的写法,我在控制台项目中测试就没问题,在我开发的一个项目中,就出现问题了,很奇怪
      

  6.   

    不要用double做加法,你可以看一下MSDN上的一个例子:using System;public class Example
    {
       public static void Main()
       {
          Double value = .1;
          Double result1 = value * 10;
          Double result2 = 0;
          for (int ctr = 1; ctr <= 10; ctr++)
             result2 += value;      Console.WriteLine(".1 * 10:           {0:R}", result1);
          Console.WriteLine(".1 Added 10 times: {0:R}", result2);
       }
    }
    // The example displays the following output:
    //       .1 * 10:           1
    //       .1 Added 10 times: 0.99999999999999989
    换用Decimal吧
      

  7.   


    谢谢大家,问题解决了,改用decimal了