AS3 - afrunding af tal, en lille gotcha

I min jagt efter en måde nemt at afrunde et tal til 2 decimaler, f.eks. fra 8,75469 og til 8,75, er jeg mange gange gået forgæves, for mystisk nok, så modtager Math.round() funktionen ingen argumenter, den afrunder altid til et helt tal.

Men, der findes rent faktisk en indbygget løsning, problemet for mig har bare været at jeg har haft stirret mig blind på Math.round() og Math-klassen generelt, for svaret findes i virkeligheden på Number og Int klassen.
De har nemlig begge to funktionen toFixed, som netop kan afrunde:

var num:Number = 8.45132;
var dec:String = num.toFixed(2);
trace(dec) //8.45

var danish:String = dec.split(".").join(",");
trace(danish) // 8,45

Som bonus har jeg også lige vist en simpel måde at ændre punktummet til et komma, hvis man har behov for at vise det til en dansk bruger.

Det her er en af de ting, hvor hvis man ved det, så er det helt åbenlyst, men gør man ikke, så er det nemt at stirre sig blind på Math klassen som jeg gjorde :-)



Del:These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • digg

4 kommentarer

  1. Mads Bjerre siger: (9. september 2009 kl. 15:00 )

    Godt tip - kendte det faktisk ikke. Dog værd at være opmærksom på, at toFixed() returnerer String og ikke Number.

    Hvis man vil holde sig udelukkende til tal og Math-klassen, kan man nemt afrunde til to decimaler bare ved at gange og dividere lidt (men det ved du sikkert allerede):

    var num : Number = 8.45132;
    var rounded : Number = Math.round(num * 100) / 100;
    trace(rounded) //8.45

  2. felisan siger: (9. september 2009 kl. 23:12 )

    fin info :)

  3. Mads Buch Stage siger: (10. september 2009 kl. 09:52 )

    @Mads Bjerre:
    Ja, det er rigtigt det med stringen, men 9 ud af 10 gange hvor jeg har brug for det, så er det i forbindelse med at vise et tal til brugeren - har sjældent være ude for at ville reducere præcisionen i mine beregninger ;-)

    Men som sagt, fin pointe - opdaterer lige eksemplet :-)

  4. mat siger: (14. september 2009 kl. 11:39 )

    Mht til split().join() finten, hvorfor så ikke vinde lidt af magten ved regular expressions og bruge String.replace()?

    var danish:String = dec.replace(/\./, “,”);

    :)

Skriv en kommentar