Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I round numbers up instead of down?

Tags:

c#

I'm performing some calculations and inserting the result into a database.

My problem is, that the answers I'm getting seem to be rounding down rather than up. This might not seem important but over the course of a lot of sales, the cents start adding up!!

Decimal pubCut = rrp * (percentageCutD / 100);
Decimal retCut = rrp * retailerCut;
Decimal edcut = rrp * edpercentage;

I'll be honest, I'm rubbish with figures and the whole Maths function was something I tried to avoid in college. Can anyone tell me how I can get these figures to round up as opposed to down?

like image 797
109221793 Avatar asked Nov 12 '10 08:11

109221793


People also ask

How do you round up and down numbers in math?

If the digit to the right of the rounding digit is 0, 1, 2, 3, or 4, the rounding digit is not changed, and the number is said to be rounded down. If the rounding digit is followed by 5, 6, 7, 8, or 9, the rounding digit is increased by one, and the number is rounded up.

How to round up to the nearest even integer in Excel?

EVEN(number) rounds up to the nearest even integer. In both functions, number is any real number that you want to round. If number is non-numeric, the functions return the #VALUE! error. If number is negative, it is rounded away from zero.

How do you round numbers to the nearest decimal?

You can use a calculator or Microsoft Excel document to round numbers or do it by hand. Round a decimal by finding the place value you're rounding to and looking at the digit on the right; if it's less than 5, round up, and if it's greater, round down. Whole numbers can be rounded off to the nearest tens, hundreds, or thousands digit.

Which one should I use to round a number?

Which one to use depends on your rounding criteria. To round a number down to nearest 0.5, use the FLOOR function, for example =FLOOR(A2, 0.5). To round a number up to nearest 0.5, use the CEILING function, for example =CEILING(A2, 0.5). To round a number up or down to nearest 0.5, use the MROUND function, e.g.


3 Answers

Use Math.Ceiling() method.

double[] values = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6};
Console.WriteLine("  Value          Ceiling          Floor\n");
foreach (double value in values)
   Console.WriteLine("{0,7} {1,16} {2,14}", 
                     value, Math.Ceiling(value), Math.Floor(value));
// The example displays the following output to the console:
//         Value          Ceiling          Floor
//       
//          7.03                8              7
//          7.64                8              7
//          0.12                1              0
//         -0.12                0             -1
//          -7.1               -7             -8
//          -7.6               -7             -8
like image 166
Liviu Mandras Avatar answered Sep 21 '22 00:09

Liviu Mandras


Your problem is this

(percentageCutD / 100)

Since 100 is an int, it will perform integer division, so that 150/100 becomes 1. You can fix this by maksing sure that 100 is a decimal since you want a decimal as result in the end. Change your code to.

(percentageCutD / 100D)

However, if you always want to round values even like 1.1 up to 2, then you will have to use Math.Ceiling to accomplish this. If you for some reason want to avoid the Math class (I can't see why you want to do it, you can add 1 to the result and cast it to an int to effectively round up to the nearest integer.

like image 30
Øyvind Bråthen Avatar answered Sep 20 '22 00:09

Øyvind Bråthen


.Net's Math.Round function uses something commonly referred to as banker's rounding which works by rounding .5 to the nearest even integer, ie 22.5 = 22 and 23.5 = 24. This gives a more even distribution when rounding.

It's also worth noting the SQL server doesn't use bankers rounding

like image 28
Homde Avatar answered Sep 20 '22 00:09

Homde