C#中double类型参与运算 精度引发的问题 求指导~

saberxl03 2011-12-05 05:14:03
winform界面上有个datagridview1 用于输入多组数据【体积】【吸光度】、一个textbox用于录入【浓度】。 当点击按钮后,取出dgv1中的各组数,与【浓度】计算,后填入另一个datagirdview2中用于显示。 (【浓度c】读取后转换为double类型,然后取dgv1中的【体积V】也转换为double类型, m= c*V。 m显示到dgv2) 问题就在于,比如c=1.13 v=0.1时候, 计算出来应该等于 0.113 但是程序显示后就成了0.112999999…… 凡是两个小数相乘, 他都会出现这种情况!!~~~ 何解呢??问题补充:

补充一下, 【体积v】【吸光度】是多组数据,而且我在计算他【含量】的时候,同时在进行累加、以及其他运算(因为最后用于计算标准曲线方程), 所以最后累加的【sum1】、【sum2】以及【sum1】*【sum1】、【sum1】*【sum2】等等 这些值就会也是跟了很多为小数…… 而这些值参与最后计算时候,误差就会很大很明显了……
...全文
642 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
迪卡 2013-05-23
  • 打赏
  • 举报
回复
恩,果然 计算金额的 还是用 decimal 好些。
zh6335901 2011-12-05
  • 打赏
  • 举报
回复
用decimal吧,再不行用数组存各个位
Icedmilk 2011-12-05
  • 打赏
  • 举报
回复
为什么我这里
var v = 1.13 * 0.1;
Console.WriteLine(v);

就是正常的结果?
double已经精度很高了啊

而且就算再大的数据类型,总会有精度问题。

你更应该从数值计算角度考虑如何减少误差的累积
  • 打赏
  • 举报
回复
改成如下类型
 decimal c=1.13M,v=0.1M;
decimal result = c * v;

111,094

社区成员

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

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

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