Math.Round returning a rounded up for odd values but rounds down for even

后端 未结 4 745
情深已故
情深已故 2021-01-13 12:34

I am trying to found a float using math round I found the following

0.5 --> 0
1.5 --> 2
2.5 --> 2
3.5 --> 4

and so on. I believ

相关标签:
4条回答
  • 2021-01-13 13:15

    You may try like this

     Math.Round(value, MidpointRounding.AwayFromZero);
    

    From MSDN

    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.

    Also to mention one important point which I think is good to mention is that Microsoft has followed the IEEE 754 standard. This is also mentioned in MSDN for Math.Round under Remarks which says:

    Round to nearest, ties to even – rounds to the nearest value; if the number falls midway it is rounded to the nearest value with an even (zero) least significant bit, which occurs 50% of the time; this is the default for binary floating-point and the recommended default for decimal.

    Round to nearest, ties away from zero – rounds to the nearest value; if the number falls midway it is rounded to the nearest value above (for positive numbers) or below (for negative numbers); this is intended as an option for decimal floating point.

    0 讨论(0)
  • 2021-01-13 13:17

    You could use this one, to overcome that you have stated:

    Math.Round(value, MidpointRounding.AwayFromZero);
    

    Using the above:

    When a number is halfway between two others, it is rounded toward the nearest number that is away from zero.

    For further documentation about the MidpointRounding enumeration, please have a look here.

    0 讨论(0)
  • 2021-01-13 13:20

    From documentation;

    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. Note that this method returns a Double instead of an integral type.

    Math.Round method has some overloads that takes MidpointRounding as a parameter which you can specify the rounding value if it is midway between two numbers.

    AwayFromZero 
    

    When a number is halfway between two others, it is rounded toward the nearest number that is away from zero.

    ToEven
    

    When a number is halfway between two others, it is rounded toward the nearest even number.

    0 讨论(0)
  • 2021-01-13 13:25

    This is known as bankers rounding (round to even). You can read more about it here. This is a .NET Framework feature and is working as designed.

    0 讨论(0)
提交回复
热议问题