Funktionen vil returnere en streng istedet for et tal fordi mange af de tal der kan blive afrundet til ikke har nogen eksakt repræsentation i floatingpoint og derfor ville blive udskrevet med for mange decimaler alligevel.
function afrund ( tal, precision ) { precision= Math.round(precision); // SKAL være integer. var pDec = Math.floor(precision/2); // antal decimaler var p5 = precision -(2*pDec); // 1 hvis \"halv\" decimal extra tal = tal*Math.pow(10,pDec); alert (\" \"+p5+\" \"+pDec+\" \"+tal); if ( p5 > 0 ) tal=tal*2; tal = Math.round(tal); //kan fejle ved for mange decimaler og/eller store tal if ( p5 > 0 ) tal=tal*5; tal = \"\" +tal; // streng fra nu af. if ( p5 > 0 ) { if ( tal[tal.length-1]==\"0\" ) { tal = tal.substring(0,tal.length-1); } else { pDec += 1; } }; if ( pDec > 0 ) { tal = tal.substring(0,tal.length-pDec) +\".\" +tal.substring(tal.length-pDec); } else { for (i=0; i>pDec; i--) tal = \"\" +tal +\"0\"; }; return tal; }; //end afrund ( float, integer ) -> string;
Ved nærmere læsning af spgm (og for at skrive som svar:)
function afrund ( tal, precision ) { var pDec = Math.round(precision); // pDec-1 0..9 decimaler // +en extra 0 eller 5 decimal tal = tal*Math.pow(10,pDec); alert (\" \"+pDec+\" \"+tal); tal=tal*2; tal = Math.round(tal*2)*5; //kan fejle ved for mange decimaler og/eller store tal tal = \"\" +tal; // streng fra nu af. if ( pDec > 0 ) { tal = tal.substring(0,tal.length-pDec) +\".\" +tal.substring(tal.length-pDec); } else { for (i=0; i>pDec; i--) tal = \"\" +tal +\"0\"; }; return tal; }; //end afrund ( float, integer ) -> string;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.