decimal total;
total +=decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString()))
其中dr.Cells["jf"].Value.ToString()为datagridview的行,每个数值都是623.1,共有2998个。
也就是相当于623.1*2998=1868053.80,但计算出的却是1868053.81,多出了0.01但我从excel导入datagridview时,从excel取数。
total += decimal.Parse(exceldr[i].ToString());
得到的却是正确的1868053.80请问为什么出现了差异?

解决方案 »

  1.   

    有误差不叫decimal你查给decimal.Parse传递的字符串是不是有精度问题吧
      

  2.   

    你的所谓623.1,在原始的datagridview数据源中定义为什么类型的?计算机编程,需要知道“数值精度、误差”的概念。每一个数几乎都有误差,多个数相加,结果误差当然是每一个数误差的累积。
      

  3.   

    要么你就确保 decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString())) 结果只能有一位小数,而舍掉其它小数。如果不能确保,例如业务上jf就不是保证只有一位小数的,那么就还是要看看你的数据源计算中某个环节(最初的环节或者中间环节都有可能)使用了有误差的数据类型。
      

  4.   


    datagridview数据源中是DataGridViewTextBoxColumn,显示为623.1
      

  5.   

    decimal total=0.0m;
    total +=decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString()));你再执行一下结果,看看!!!!!!!!