日期:2014-05-17  浏览次数:21091 次

Decimal运算误差
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

请问为什么出现了差异?

------解决方案--------------------
有误差不叫decimal

你查给decimal.Parse传递的字符串是不是有精度问题吧
------解决方案--------------------
你的所谓623.1,在原始的datagridview数据源中定义为什么类型的?

计算机编程,需要知道“数值精度、误差”的概念。每一个数几乎都有误差,多个数相加,结果误差当然是每一个数误差的累积。
------解决方案--------------------
要么你就确保 decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString())) 结果只能有一位小数,而舍掉其它小数。如果不能确保,例如业务上jf就不是保证只有一位小数的,那么就还是要看看你的数据源计算中某个环节(最初的环节或者中间环节都有可能)使用了有误差的数据类型。
------解决方案--------------------
decimal total=0.0m;
total +=decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString()));

你再执行一下结果,看看!!!!!!!!