C#学习教程:C# – (int)Math.Round((double)(3514 + 3515)/ 2)= 3514?分享


C# – (int)Math.Round((double)(3514 + 3515)/ 2)= 3514?

大家好。

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

返回3514; 不应该是3515?

Math.Round是罪魁祸首

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

我们称之为Banker的Rounding甚至四舍五入。

关于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); 

Math.Round的默认舍入方案是所谓的银行家舍入(这是财务和统计区域的标准),其中中点值四舍五入到最接近的偶数。 看起来你期望中点值从零开始(这可能是你在小学里教过的那种:如果它以5结尾,向上舍入)。

如果您只是担心它不能以可接受的方式工作,请不要担心。 如果你希望它从零开始,你可以这样做:

上述就是C#学习教程:C# – (int)Math.Round((double)(3514 + 3515)/ 2)= 3514?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 int AverLI = (int)Math.Round((double)AveragLI, MidpointRounding.AwayFromZero); 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959778.html

发表评论

邮箱地址不会被公开。 必填项已用*标注