for循环中的C#bug

Ham*_*udy 3 c# console for-loop visual-studio-2010

我不应该得到负数,请看下面的截图:

见下图:

在此输入图像描述

这是代码:

    for (double i=8.0; i<=12;i=i+0.5)
        {
          double aa=  (i - Convert.ToInt32(i)) ;
          Console.WriteLine(" "+i+" "+aa);
        }
Run Code Online (Sandbox Code Playgroud)

ang*_*son 14

如果您查看文档:

返回值
类型:System.Int32
值,四舍五入为最接近的32位有符号整数.如果值在两个整数之间,则返回偶数; 也就是说,4.5转换为4,5.5转换为6.

这意味着每个其他数字将向上舍入,然后向下,然后向上,然后向下,这意味着您将获得一半时间的负数.

这种方法的目的是通过始终在特定方向上舍入来均衡偏差.考虑总结大量的值,先将它们四舍五入.如果您总是向上舍入,则最终总和将始终大于对未舍入值求和然后舍入总和.但是,如果根据上面列出的规则将上半部分向下舍入一半,则舍入数字的最终总和更可能更接近舍入的总和.

您还可以在维基百科:Round上阅读更多相关信息.它有时被称为银行家四舍五入,但据我所知,银行不使用这种方法.

确保您按照自己的意愿进行四舍五入: