Avatar billede hejhejhej Nybegynder
08. juni 2002 - 14:41 Der er 17 kommentarer og
1 løsning

decimaler

Hvordan sikrer man at der altid kun er to decimaler...jeg har en side hvor den skal regne noget moms ud, og typisk kommer den med 15-16 decimaler hvilket ikke er særlig hensigtsmæssigt...hvordan laver man en funktion som sikrer at der altid er to decimaler...
fx 0.244444 = 0.24
  5  = 5.00
  2.1 = 2.10 osv 
Avatar billede o-zone Nybegynder
08. juni 2002 - 14:47 #1
var x=0,244444;
var afrundetX = (Math.floor(x*100))/100;
Avatar billede o-zone Nybegynder
08. juni 2002 - 14:50 #2
erh... kommaet skulle naturligvis have været et punktum! :)
Avatar billede o-zone Nybegynder
08. juni 2002 - 14:51 #3
Ups ... så først nu at der ALTID skal være t decimaler ... et øjeblik!
Avatar billede mikoalngelo Nybegynder
08. juni 2002 - 14:58 #4
(LM)
Avatar billede o-zone Nybegynder
08. juni 2002 - 15:03 #5
For at sikre 0'er i enden, er du nødt til at lave dit tal om til en streng (dvs. du kan ikke længere regne med det, uden først at konvertere det tilbage til et tal!)

men prøv at lure denne funktion:
---8<----------
    function lavToDecimaler(tal)
    {
        talStr = tal+"";
        if (talStr.indexOf(".") == -1)
        {
            talStr += ".00";
        }
        else if (talStr.indexOf(".")==talStr.length-2)
        {
            talStr += "0";
        }
        return talStr;
    }
---8<----------
Avatar billede o-zone Nybegynder
08. juni 2002 - 15:07 #6
I øvrigt har jeg fundet en højest besynderlig fejl:
Af en eller anden grund, da jeg testede med 5.02, så tror min maskine at 5.02*100 = 501.99999999999994(???)

Er der nogen der kan give mig en fornuftig forklaring på hvorfor den synes det??? :-(
Avatar billede o-zone Nybegynder
08. juni 2002 - 15:11 #7
Skyldes det virkelig den manglende præcision på float?? Jeg har ikke set fejlen med andre tal (endnu!) :-(
Avatar billede o-zone Nybegynder
08. juni 2002 - 15:32 #8
Hmm... hvis det er til et regnskab, så skal du nok også bruge Math.round() istedet for Math.floor (som kun skærer decimaler fra!)

Det samlede script kunne altså se ud i retning af:
---8<----------
<html>
<body>
<script language="javascript">

    function doTheNumberThing(tal) { return lavToDecimaler((Math.floor(tal*100))/100); }

    function lavToDecimaler(tal)
    {
        talStr = tal+"";
        if (talStr.indexOf(".") == -1) { talStr += ".00"; }
        else if (talStr.indexOf(".")==talStr.length-2) { talStr += "0"; }
        return talStr;
    }
   
</script>

<form name="form1">
Indtast et kommatal (separeret med ".") <input type="text" name="tal" size="10" onChange="document.form1.result.value = doTheNumberThing(this.value); return true;"> <input type="button" value="beregn" onClick="document.form1.result.value = doTheNumberThing(document.form1.tal.value); return true;"> afrundet bliver det: <input type="text" name="result" size="10" readonly=readonly><br>
</body>
</html>
---8<----------
Avatar billede o-zone Nybegynder
08. juni 2002 - 15:33 #9
sorry byt selv Math.floor ud med Math.round
(satans som det tastatur gør vrøvl ;-) )
Avatar billede hejhejhej Nybegynder
08. juni 2002 - 15:58 #10
det er desværre sådan at jeg er meget elendig til javascript...så jeg har lidt problemer med at få koden sat ind i min kode. Jeg har en variabel tal=document.cform.fragtgebyr.value;  jeg vil så have den til at skrive værdien efter der er kommet decimaler på i et tekstfelt..men hvordan skal jeg kalde funktionen så det virker???
Avatar billede hejhejhej Nybegynder
08. juni 2002 - 16:09 #11
jeg har forsøgt at kalde funktionen når der trykkes på en knap, hvorefter den skal vise resultatet i en msgbox, men hvorfor virker denne kode ikke???:
    function afrund()
    {
        tal = "2.5555";
        tal = (Math.round(tal*100))/100;
        talStr = tal + "";
        if (talStr.indexOf(".") == -1) { talStr += ".00"; }
        else if (talStr.indexOf(".")==talStr.length-2) { talStr += "0"; }
        alert(talStr)
        //return talStr;
    }

<INPUT type="button" value="Button" id=button1 name=button1 onclick=afrund()>
Avatar billede o-zone Nybegynder
08. juni 2002 - 19:00 #12
Det virker hos mig (?) Men der er fejl i det!

Din onClick bør hedde:
onClick="afrund(); return true;"

...og så skal din funktion selvfølgelig ind i en script tag(?) Alt i alt:
---8<----------
<html>
<body>
<script language="javascript">
<!--
  function afrund()
  {
    tal = "2.5555";
    tal = (Math.round(tal*100))/100;
    talStr = tal + "";
    if (talStr.indexOf(".") == -1) { talStr += ".00"; }
    else if (talStr.indexOf(".")==talStr.length-2) { talStr += "0"; }
    alert(talStr)
    //return talStr;
  }
//-->
</script>
<INPUT type="button" value="button" id="button1" name="button1" onClick="afrund(); return true;">
</body>
</html>
---8<----------
Avatar billede o-zone Nybegynder
08. juni 2002 - 19:04 #13
"return true;" i slutningen af din onClick parameter er der for at give systemet signal om at du har taget hånd om onClick eventen, så systemet ikke behøver at gøre mere ved det event.
Avatar billede skovenborg Nybegynder
08. juni 2002 - 19:07 #14
Dette er et andet eksempel på hvordan det kan gøres:
<html>
<head>
<script language="javascript">
function rund()
{
  num = parseFloat(document.form1.tal.value);
  anum = Math.floor(num*100)/100;
  alert(anum);
}
</script>
</head>
<body>
<form name="form1">
  <input type="text" name="tal">
  <input type="button" name="knap" value="Afrund" onClick="rund();">
</body>
</html>
Avatar billede skovenborg Nybegynder
08. juni 2002 - 19:10 #15
Nej, glem det. O-zones ser mere rigtig ud
Avatar billede jakoba Nybegynder
10. juni 2002 - 20:54 #16
jeg tror det hejhejhej mangler er at få det knyttet sammen med felterne i sin formular

---8<----------
<html>
<body>
<script language="javascript">
<!--
  function afrund()
  {
    tal = document.formNavn.tekstInd.value;
    tal = (Math.round(tal*100))/100;
    talStr = tal + "";
    if (talStr.indexOf(".") == -1) { talStr += ".00"; }
    else if (talStr.indexOf(".")==talStr.length-2) { talStr += "0"; }

    document.formNavn.tekstUd.value = talStr;
  }
//-->
</script>

<form name='formNavn'>
<input type='text' name='tekstInd' value="">
<input type='text' name='tekstUd' value="">
<INPUT type="button" value="button" id="button1" name="button1" onClick="afrund(); return true;">
</form>
</body>
</html>
---8<----------
Avatar billede hejhejhej Nybegynder
11. juni 2002 - 19:33 #17
jeg fik det til at virke med o-zone's kode...tak for hjælpen
Avatar billede o-zone Nybegynder
11. juni 2002 - 23:28 #18
Tak for points :-9
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