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】等等 这些值就会也是跟了很多为小数…… 而这些值参与最后计算时候,误差就会很大很明显了……

解决方案 »

  1.   

    改成如下类型
     decimal c=1.13M,v=0.1M;
                decimal result = c * v;
      

  2.   

    为什么我这里
                var v = 1.13 * 0.1;
                Console.WriteLine(v);
    就是正常的结果?
    double已经精度很高了啊而且就算再大的数据类型,总会有精度问题。你更应该从数值计算角度考虑如何减少误差的累积
      

  3.   

    用decimal吧,再不行用数组存各个位
      

  4.   

    恩,果然 计算金额的 还是用 decimal 好些。