Avatar billede tknudsen Nybegynder
12. oktober 2000 - 16:33 Der er 7 kommentarer og
1 løsning

afrunding af decimal tal

Jeg mangler en funktion som kan afrunde et tilfældigt til til nærmeste hele eller halve værdi med x antal decimaler.

Feks m. 1 decimal
1.2 => 1.0
1.25 => 1.5
1.75 => 2.0

og
1.19999999999 => 1.0
Avatar billede el_gnu Nybegynder
12. oktober 2000 - 16:46 #1
function heltal(i) {
  return (i+\'\').split(\'.\')[0];
}
Avatar billede el_gnu Nybegynder
12. oktober 2000 - 16:46 #2
sorry, så ikke det m. halve værdi
Avatar billede nixen Nybegynder
12. oktober 2000 - 16:53 #3
function afrund(tal) {
return Math.round(tal*2)/2
}
Avatar billede nixen Nybegynder
12. oktober 2000 - 16:54 #4
men, altså, hvis du mener at den skal returnere med x decimaler bliver den en anelse længere, så må du lige skrive igen..
Avatar billede tknudsen Nybegynder
13. oktober 2000 - 10:05 #5
ja - det skal returneres med x antal decimaler
Avatar billede jakoba Nybegynder
14. januar 2001 - 03:21 #6
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;

der bruges punktum som decimaltegn

mvh JakobA
Avatar billede jakoba Nybegynder
14. januar 2001 - 03:34 #7
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;
Avatar billede tknudsen Nybegynder
15. januar 2001 - 09:04 #8
very nice

tak
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester