• Status: Solved
• Priority: Medium
• Security: Public
• Views: 1675

Rounding a decimal 5.125 to 5.13

How do I round a variable that equals 5.125 or something at the 5 range to always round up - in this case to 5.13.  Right now, I'm doing Round(x,2) with x = 5.125 and it still outputs 5.125.

Thanks.
0
tqwu
• 5
• 3
• 2
• +1
1 Solution

Commented:
Hi

It starts counting at 0. Use Round(x,1)

Regards,
Zyloch
0

Commented:
Before library functions came along to do it, we would round to the i-th place to the right by adding  5*10**(-i)
0

Author Commented:
Using Round(x,1) gives me 5.1
0

Commented:
Hmm... Yea, it should be Round(x,2) [Sorry for my temporarily lapse of thought].

That's odd. Try changing x to 5.1255 and see what happens.
0

Commented:
Alas, the Round() method doesn't always round up.

From the c# help:
"When d is exactly halfway between two rounded values, the result is the rounded value that has an even digit in the far right decimal position. For example, when rounded to two decimals, the value 2.345 becomes 2.34 and the value 2.355 becomes 2.36. This process is known as rounding toward even, or rounding to nearest."

0

Author Commented:
....and how to do solve this problem...?
0

Commented:
Interesting cookre. I read about that once in a math book. It's something called significant digit rounding or something that's supposed to minimize error in large scale rounding. I dunno how that really works to minimize those errors, but they say it does.

tqwu: Have something like this instead of round:

ceil(x*100)/100
0

Commented:
How is x typed?
0

Commented:
That's interesting. I'm seeing strange results from a similar operation here. Any time the digit in the decimal place to be rounded to is even, the following digit is 5, and no other digits follow, it rounds down. I would guess that this has to do with a slight inaccuracy inherent in the representation of the numbers involved in binary. (Because we can't use an infinite number of binary digits, some numbers can't be represented precisely.)

It took me too attempts to find a way around this. My first correction seemed to run straight into the original problem. However, this function seems to do the trick:

Function TrueRound(number, places)
TrueRound = Round(number, places)
If number * 10^places - TrueRound * 10^places = 0.5 Then TrueRound = TrueRound + 10^(-places)
End Function

Use TrueRound wherever you would otherwise be using Round, and I think you'll be okay.
0

Commented:
Is this in ASP or PHP? Anyways, why not just have something like this?

Function TrueRound(number,places)
TrueRound = Ceil(number*(Math.pow(10,places)))/Math.pow(10,places)
End Function

(If the above funciton is wrong, sorry, I'm not too good with ASP, but the concept remains, this is it in PHP:

function TrueRound(\$number,\$places) {
return(ceil(\$number*(pow(10,\$places)))/pow(10,\$places));
}

0

Commented:
Ah, a slight mistake. In my case, it'll always round up no matter even if it's 5.124 or whatever. travis's should work
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.