一个本来应该得到205.0的数却得到了204.999985的结果
于是我在调试的时候用几种方法算了一下,结果是这样的
首先说明里面的参数
arraylist对应的那个值为8.2如果不用(float)会说缺少强制转换然后YSlice的值是0.4所以82/0.4的结果应该是20.5但是*10以后结果本应该是205.0,却成了204.999985我直接把8.2/0.4的结果拿来*10又没有问题,说明问题出在8.2/0.4*10上直接/0.4也是不对的,说明不是变量引用的问题直接*25也没有问题*10/0.4也出现问题,说明就是这两个一起的时候会有问题这种情况该怎么解决啊调试float计算c#

解决方案 »

  1.   

    要用来画图,drawline参数里只能用int和float
      

  2.   

    建议你找一本《计算方法》的教科书看看,看第一章的概念就够了。你可以看看假设两个数的误差是a和b,那么他们的加减法的累计误差是多少;假设是除法,那么累计误差又是多少?!float只有7位有效数字,也就是说古老的简易计算器的计算精度。当你多次计算,特别是在除数中使用误差数据,累计误差的增长必然很快。这个时候,你就应该改变计算公式,使用一个理论上结果一样、但是累计误差最小的公司。
      

  3.   

    要用来花曲线,DrawLine参数是int和float啊
      

  4.   

    果然是float精度引起的误差么,但是为什么分步算没有问题,写一行里就出问题啊
      

  5.   

    要用来花曲线,DrawLine参数是int和float啊
    计算过程中用decimal,画线时强转一下即可。decimal的精度比float和double要高,虽然不是绝对安全的,但是基本上能满足你的要求,在你找到如何避免累积误差的解决方案之前。
      

  6.   

    要用来花曲线,DrawLine参数是int和float啊
    计算过程中用decimal,画线时强转一下即可。decimal的精度比float和double要高,虽然不是绝对安全的,但是基本上能满足你的要求,在你找到如何避免累积误差的解决方案之前。
    我用double计算,画图的时候强制转换成float就满足需求了
    只是现在又有别的问题了,哎
    不过是计算方法的问题,自己琢磨吧
      

  7.   

    float 是单精度,应该用双精度的 double,但也只是误差小很多。
      

  8.   

    这不是错误,而是误差,float只有6~7位有效数字,所以在小数点后第四位出现误差是完全正常的,如果嫌误差太大,可以用double,