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?
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.
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.
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 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.
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
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.
.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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With