Reputation: 1027
Given a decimal '96.154', how can I ensure that it is always rounded up to 96.16 (as opposed to normal rounding to 2 decimals which would give 96.15).
Upvotes: 17
Views: 15565
Reputation: 4010
In case anyone is looking at this somewhat old question in 2022, the easiest way to do this with more recent versions of the framework/.NET core is this:
decimal.Round(96.154M, 2, MidpointRounding.ToPositiveInfinity)
This gives the result 96.16. The second parameter is the number of digits.
Note that if the input is negative and you want to round up to the nearest whole negative number, then you need to specify MidpointRounding.ToNegativeInfinity. Obviously you can test the input value's sign and use the appropriate MidpointRounding value if you want to support both scenarios.
Upvotes: 1
Reputation: 1
Here is my version of a RoundUp method, In this can specific decimal
void Main()
{
Console.WriteLine(RoundUp(2.8448M, 2));
//RoundUp(2.8448M, 2).Dump();
}
public static decimal RoundUp(decimal numero, int numDecimales)
{
decimal valorbase = Convert.ToDecimal(Math.Pow(10, numDecimales));
decimal resultado = Decimal.Round(numero * 1.00000000M, numDecimales + 1, MidpointRounding.AwayFromZero) * valorbase;
decimal valorResiduo = 10M * (resultado - Decimal.Truncate(resultado));
if (valorResiduo < 5)
{
return Decimal.Round(numero * 1.00M, numDecimales, MidpointRounding.AwayFromZero);
}
else
{
var ajuste = Convert.ToDecimal(Math.Pow(10, -(numDecimales + 1)));
numero += ajuste;
return Decimal.Round(numero * 1.00000000M, numDecimales, MidpointRounding.AwayFromZero);
}
}
Upvotes: 0
Reputation: 2145
I think your looking for the Math.Ceiling
method.
You could combine this with a multiplier to specify how many decimal places to round. Like this,
public float roundUp(float number, int numDecimalPlaces)
{
double multiplier = Math.Pow(10, numDecimalPlaces))
return Math.ceiling(number*multiplier) / multiplier;
}
Upvotes: 6
Reputation: 1
Here is the code of a roundUp method for a value and base fraction. The base fraction you should use for your question is 0.05M. However the method can be used for other common scenario which is base fraction 0.5M; And you can apply it in interesting ways like for example using a base fraction of 0.3M. Well I hope it should answer your questions, have fun :
static decimal roundUp(decimal aValue, decimal aBaseFraction)
{
decimal quotient = aValue / aBaseFraction;
decimal roundedQuotient = Math.Round(quotient, 0);
decimal roundAdjust = 0.0M;
if (quotient > roundedQuotient)
{
roundAdjust = aBaseFraction;
}
return roundAdjust + roundedQuotient * aBaseFraction;
}
Upvotes: 0
Reputation: 50825
Kind of hacky but a very intuitive way to do so:
var val = 96.154M;
var result = Math.Ceiling(val * 100) / 100.0M;
Upvotes: 19