[JS] altijd 2 decimalen tonen, ook bij duizentallen

Pagina: 1
Acties:
  • 298 views sinds 30-01-2008
  • Reageer

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Ik heb in een shoppingcart een bewerking zitten die verzendkosten bij het totaalbedrag optelt, dit doe ik met behulp van onderstaande functie:

JavaScript:
1
2
3
4
5
6
7
8
9
10
function Decimaal(getal) {
 if(Math.round(getal) == getal) {
   getal = getal + ',00';
 }
 else if(Math.round(getal*10) == (getal*10)) {
  getal = getal + '0';
 }
 getal = getal.replace(".",",")
 return getal;
}

Dit gaat echter prima zodra het totaalbedrag onder de 1.000 is. Echter een getal boven de 1000 gaat helemaal mis.
Ik heb al uren geprobeerd het goed te krijgen maar het lukt gewoon niet. Javascript toont een decimaal altijd met een punt, toch? En kijkt niet naar de number en currency settings van het systeem toch?

Ik wil namelijk dat duizendgetallen met een punt worden gescheiden en dat een komma wordt gebruikt voor decimalen.

Ik roep de functie bijv. als volgt aan:
JavaScript:
1
Decimaal(parseFloat(document.bestelling2_form.totaalbedrag_number.value)+15.00);


Iemand enig idee dit op te lossen? Heb ook al gebruik geprobeerd te maken van toFixed() maar lukt ook niet en wordt niet door oudere browsers ondersteund.

_/-\o_

Verwijderd

waarom niet (Math.round(getal*100))/100 ?

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Verwijderd schreef op dinsdag 18 oktober 2005 @ 14:38:
waarom niet (Math.round(getal*100))/100 ?
Ik snap er echt geen biet van |:( |:(
Als ik alleen al dit doe: alert(getal*100);
Krijg ik al als output NaN (Not a number)
En als ik bij het getal 1.074,00 doe alert(parseFloat(getal)*100);
krijg ik als output: NaN

Verwijderd

JavaScript:
1
getal = parseFloat(getal).toFixed(2);

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Het gaat nu beter, de input van het getal was verkeerd, dat was 1.074,00 i.p.v. 1074.00.
Echter hoe kan ik achteraf weer duizendtallen opsplitsen met een punt?
Dus 1.074,00 i.p.v. 1074,00 ?
Daar is zeker geen (simpele) functie voor?

[ Voor 10% gewijzigd door Urk op 18-10-2005 14:55 ]


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Bedankt kaaskoekje! _/-\o_
Ik heb nu de volgende functie, die werkt bijna perfect, zowel voor duidzendtallen als voor getallen onder de 1000:

JavaScript:
1
2
3
4
5
6
7
8
9
function Decimaal(getal, verzendkosten) {
 getal = getal.replace(".","");
 getal = getal.replace(",",".");
 getal = parseFloat(getal);
 getal = getal+verzendkosten;
 getal = parseFloat(getal).toFixed(2);
 getal = getal.replace(".",",")
 return getal;
}


Echter nog 1 probleempje, zoals hierboven gezegd, hoe maak ik van 1074,50 nou 1.074,50? Dus met een duizendseperator?

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Opgelost! :9


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Decimaal(getal, verzendkosten) {
 getal = getal.replace(".","");
 getal = getal.replace(",",".");
 getal = parseFloat(getal);
 getal = getal+verzendkosten;
 getal = parseFloat(getal).toFixed(2);
 getal = getal.replace(".",",")
 var nr = getal + "";
 var part = nr.substr(nr.length%3);
 part = (nr.substr(0, nr.length%3) + part.replace(/([0-9]{3})/gi, ".$1"));
 if(part.charAt(0)==".")
     getal = part.substr(1,part.length);
 else getal = part;
 return getal;
}


Deze functie past dus tevens een duizend seperator toe met een punt, en decimalen met een komma, nederlanse notatie dus :)

[ Voor 21% gewijzigd door Urk op 18-10-2005 15:17 ]


Verwijderd

Urk schreef op dinsdag 18 oktober 2005 @ 15:16:
Opgelost! :9


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Decimaal(getal, verzendkosten) {
 getal = getal.replace(".","");
 getal = getal.replace(",",".");
 getal = parseFloat(getal);
 getal = getal+verzendkosten;
 getal = parseFloat(getal).toFixed(2);
 getal = getal.replace(".",",")
 var nr = getal + "";
 var part = nr.substr(nr.length%3);
 part = (nr.substr(0, nr.length%3) + part.replace(/([0-9]{3})/gi, ".$1"));
 if(part.charAt(0)==".")
     getal = part.substr(1,part.length);
 else getal = part;
 return getal;
}


Deze functie past dus tevens een duizend seperator toe met een punt, en decimalen met een komma, nederlanse notatie dus :)
Grappig; ook al gedacht aan?
JavaScript:
1
getal.toLocaleString();

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Verwijderd schreef op dinsdag 18 oktober 2005 @ 16:03:

Grappig; ook al gedacht aan?
JavaScript:
1
getal.toLocaleString();
Nee, zet die functie het getal niet om naar lokale settings van de gebruiker?

Verwijderd

Urk schreef op dinsdag 18 oktober 2005 @ 16:28:
[...]


Nee, zet die functie het getal niet om naar lokale settings van de gebruiker?
Ja, bij mij maakt ie van parsefloat(1400.7896), 1.400,79

Je hebt dan inderdaad kans, dat ie bij een andere gebruiker 1,400.79 neerzet ofzo.

[ Voor 16% gewijzigd door Verwijderd op 19-10-2005 08:55 ]


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 26-04 23:42
Thanks kaaskoekje! _/-\o_
Het is wel handig maar dat is nou net niet de bedoeling voor m'n site.
Wel weer iets geleerd! :9

[ Voor 16% gewijzigd door Urk op 20-10-2005 02:18 ]

Pagina: 1