首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Decimal演算误差

2013-02-19 
Decimal运算误差decimal totaltotal +decimal.parse(decimal.Parse(dr.Cells[jf].Value.ToString()))

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()));

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

热点排行