Decimal运算误差

灿烂阳光168 2013-01-19 03:32:58
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

请问为什么出现了差异?
...全文
187 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyqing 2013-01-19
  • 打赏
  • 举报
回复
decimal total=0.0m; total +=decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString())); 你再执行一下结果,看看!!!!!!!!
灿烂阳光168 2013-01-19
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
你的所谓623.1,在原始的datagridview数据源中定义为什么类型的? 计算机编程,需要知道“数值精度、误差”的概念。每一个数几乎都有误差,多个数相加,结果误差当然是每一个数误差的累积。
datagridview数据源中是DataGridViewTextBoxColumn,显示为623.1
  • 打赏
  • 举报
回复
要么你就确保 decimal.parse(decimal.Parse(dr.Cells["jf"].Value.ToString())) 结果只能有一位小数,而舍掉其它小数。如果不能确保,例如业务上jf就不是保证只有一位小数的,那么就还是要看看你的数据源计算中某个环节(最初的环节或者中间环节都有可能)使用了有误差的数据类型。
  • 打赏
  • 举报
回复
你的所谓623.1,在原始的datagridview数据源中定义为什么类型的? 计算机编程,需要知道“数值精度、误差”的概念。每一个数几乎都有误差,多个数相加,结果误差当然是每一个数误差的累积。
phommy 2013-01-19
  • 打赏
  • 举报
回复
有误差不叫decimal 你查给decimal.Parse传递的字符串是不是有精度问题吧

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧