1

大家好。

int[] ai1=new int[2] { 3514,3515 };

    void average1()
    {
        List<int> aveList = new List<int> { ai1[0],ai1[1]};
        double AveragLI = aveList.Average();
        int AverLI = (int)Math.Round((double)AveragLI);
        label1.Text = AverLI.ToString();
    }

返回 3514;应该不是3515吧?

4

2 回答 2

3

Math.Round 是罪魁祸首

int AverLI = (int)Math.Round((double)AveragLI);

它就是我们所说的银行家四舍五入甚至四舍五入。

Math.Round 上的信息 说

The integer nearest a. If the fractional component of a is halfway between two integers, one of which is even and the other odd, then the even number is returned.

3514.5 舍入为 3514,3515.5 也将舍入为 3514。

这个

为了避免这样做

int AverLI = (int)Math.Ceiling((double)AveragLI);
于 2013-05-04T01:22:53.887 回答
2

默认的舍入方案Math.Round所谓的银行家四舍五入(这是金融和统计领域的标准),其中中点值四舍五入到最接近的偶数。看起来您希望中点值从零四舍五入(这可能是您在小学时教过的那种:如果它以 5 结尾,则向上取整)。

如果您只是担心它无法以可接受的方式工作,请不要担心。如果您希望它从零四舍五入,您可以这样做:

int AverLI = (int)Math.Round((double)AveragLI, MidpointRounding.AwayFromZero);
于 2013-05-04T01:43:01.160 回答