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()));
你再执行一下结果,看看!!!!!!!!