How can I round up or down in C#?
c#, math
Solution
Try using decimal.Round():
decimal.Round(x, 2)
Where `x` is your value and 2 is the number of decimals you wish to keep.
You can also specify whether .5 rounds up or down by passing third parameter:
decimal.Round(x, 2, MidpointRounding.AwayFromZero);
EDIT:
In light of the new requirement (i.e. that numbers are sometimes rounded down despite being greater than "halfway" to the next interval), you can try:
var pow = Math.Pow(10, numDigits);
var truncated = Math.Truncate(x*pow) / pow;
Truncate() lops off the non-integer portion of the decimal. Note that `numDigits` above should be how many digits you want to KEEP, not the total number of decimals, etc.
Finally, if you want to force a round up (truncation really is a forced round-down), you would just add 1 to the result of the `Truncate()` call before dividing again.
Problem
I have tried using Math.Round and MidpointRounding. This does not appear to do what I need. Example: ``` 52.34567 rounded to 2 decimals UP = 52.35 1.183 rounded to 2 decimals DOWN = 1.18 ``` Do I need to write a custom function? Sometimes I need a number like 23.567 to round DOWN to 23.56. In this scenario... ``` Math.Round(dec, 2, MidpointRounding.AwayFromZero) gives 23.57 Math.Round(dec, 2, MidpointRounding.ToEven) gives 23.57 ``` Decimals up to 9 decimal places could come out and need to be rounded to 1, 2, 3 or even 4 decimal places.