Rounding ...

• Nov 9, 2003, 15:10
ole dawg
Rounding ...
Guys,

This problem has been bugging me for a couple days now ... I hope someone can help me.

I have to round a fractional value from a form input to either 0, 25, 50 or 75. I have succesfully tested the value and stripped the decimal place. If the value is for example .1, I round it to 0. If the value is say .2, I round it to .25. My problem is that when the value is > .75, my function is returning undefined. For the sake of brevity I will include only the relevant code.

Code:

```var increments = new Array(0,25,50,75); CharBefore = parseFloat(CharBefore); //the whole number CharAfter = parseFloat(CharAfter);  //the decimal var x = parseFloat(increments.length - 1) ; for ( i = 0; i <=  x ; i++  ) {                                                           var testValue = parseFloat(increments[i]);   if (CharAfter > testValue) { continue ; }   else {              var lowerValue = parseFloat(increments[i-1]);         if ((CharAfter > testValue) && (i==x)) {             median =  (testValue + 100)/2 ;             if (CharAfter >= median) {                   CharAfter = '0';                   CharBefore++;} //round up to next whole number         else { CharAfter = testValue; }                             }         else {         median =  (testValue + lowerValue)/2 ;               if (CharAfter >= median) { CharAfter = testValue; }           else { CharAfter = lowerValue; }             }         return  CharBefore + '.' + CharAfter;         break;                                                             }                                                 } // End for loop```
Any help is greatly appreciated.
• Nov 9, 2003, 17:29
beetle
What should it return? should it always round down to .75?

Anyhow, here's a vastly simplified algorithm for the rest of it
Code:

```function rounder( number ) {         return Math.round( number * 4 ) / 4; } alert( rounder( .1 ) ); alert( rounder( .2 ) );```
• Nov 9, 2003, 19:19
ole dawg
Quote:

Originally Posted by beetle
What should it return? should it always round down to .75?

Anyhow, here's a vastly simplified algorithm for the rest of it
Code:

```function rounder( number ) {         return Math.round( number * 4 ) / 4; } alert( rounder( .1 ) ); alert( rounder( .2 ) );```

frickin' amazing ...

No, it shouldn't always round down to .75 ... your function does exactly what I need.

Thanks so much for that !!!
• Nov 9, 2003, 19:41
And: here's the correct way. :nod:
Code:

```Number.prototype.rounder = function () {         return Math.round( this * 4 ) / 4; } x = .1 alert( x.rounder() ); x = .2 alert( x.rounder() );```
• Nov 9, 2003, 19:47
beetle
Oooh! Caught off guard by my own critique!

Funny that you post this whilst I'm writing my javascript scope article =)
• Nov 9, 2003, 19:52
ole dawg

The function was already written though, I just needed the rounding part of the decimal done.

The relvant parts of the code is now

Code:

```CharAfter = parseFloat(CharAfter); CharAfter = Math.round( CharAfter * 4 ) / 4; return  CharBefore + CharAfter;```
I needed to automatically round any decimal portions of a number into .25 increments, so ...

1.1 = 1
1.19 = 1.25
1.41 = 1.5

etc.

I know the Math object and round function, but just never thought about using them like this. Brain has been fried recently ... to much coding!!

Thanks again guys.
• Nov 9, 2003, 19:59
ole dawg
... and now I see that I don't need to be parsing any numbers either.... the one line function does it all ...

Even better ... more thanks !!