如下代码,得到的结果是0.069999999998;
请问如果才能得到0.07呢?
            double temp1 = 0, temp2 = 0;
            temp1 = 4.38; temp2 = 4.52;
            double temp4 = (temp1 - temp2) / 2;
            MessageBox.Show(temp4.ToString());

解决方案 »

  1.   

    试试:
    double temp1 = 0, temp2 = 0;
    temp1 = 4.38; temp2 = 4.52;
    double temp4 = (temp1 - temp2) / 2;
    MessageBox.Show(temp4.ToString("F2"));
      

  2.   

    decimal temp1 = 0, temp2 = 0;
    temp1 = 4.38; temp2 = 4.52;
    decimal temp4 = (temp1 - temp2) / 2;
    MessageBox.Show(temp4.ToString());
      

  3.   

    decimal temp1, temp2;
    temp1 = 4.38M;
    temp2 = 4.52M;
    decimal temp4 = (temp1 - temp2) / 2;
    MessageBox.Show(temp4.ToString());
      

  4.   

    "那我遇到小数点后3位或者4位的该怎么办呢?"
    什么意思?是要保留3位或4位么?
    3位就是F3,4位就是F4
    F后面的数字就是小数的位数
      

  5.   

    回wuyi8808;
    目前我的程序都是用的double型的数据,但最后显示结果的时候才发现都存在这样的误差,那我该怎么消除这样的误差呢?难道只能 Math.Round(temp4 * 10000) / 10000)么?
      

  6.   

    回Peter200694013,
    我计算的结果不能预测小数点后有几位,只需要按实际情况就可,
    例如0.7就保留1位,
    如果结果是0.56,那就保留2位
      

  7.   

    replace all double to decimal.
      

  8.   

    double 是双精度浮点数,有精度要求的.
    并不是看到是多少,存的就是多少.看空军 11楼的,如果要绝对不变的精确值,替换成 decimal
      

  9.   

    看样子只能decimal了,
    感觉不应该存在0.7=0.6999999的bug啊//
      

  10.   

    http://msdn.microsoft.com/zh-cn/library/system.double.aspx请记住,浮点数只能近似于十进制数字,浮点数的精度决定了浮点数近似于十进制数字的精确程度。默认情况下,Double 值的精度是 15 个十进制位,但内部维护的最大精度是 17 位。浮点数的精度有几种结果:* 特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。* 由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。* 如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位在转换中丢失或更改,往返可能会失败。 
      

  11.   

    double 0.7 !=0.6999999的但是double i = 0.69999999999999991;
    double j =0.7 ;i==j再来
    double i = 0.6999999999999999*10;
    i = 6.9999999999999982double i = 0.6999999999999999*100;
    i = 69.999999999999986double i = 0.6999999999999999*1000;
    i = 699.99999999999989这样够直观了吧?
      

  12.   

    MessageBox.Show(temp4.ToString("0.00"));
    保留两位
    MessageBox.Show(temp4.ToString("0.000"));
    保留三位
      

  13.   

    //保留两位
    MessageBox.Show(Math.Round(temp4, 2).ToString());
    //保留三位
    MessageBox.Show(Math.Round(temp4, 3).ToString());
      

  14.   

    把 dubA 保留到小数点后 intN 位并存储到 dubB
    int X = Convert.toInt32(10, intN);
    int X2 = Convert.toInt32(dubA * intX);
    dubB = Convert.toDouble(X2)/ X;