Scheidingsteken duizendtallen

Status
Niet open voor verdere reacties.

KurtVanHulle

Gebruiker
Lid geworden
22 apr 2003
Berichten
383
Hier ben ik weer met een andere vraag.

De resultaten van een functie zijn allemaal getallen. Hoe kan ik er voor zorgen dat die worden weergegeven met een scheidingsteken tussen de duizendtallen?

Nu staat er "5500000" maar ik wil "5,500,000" zien.
 
Het scheidingsteken voor 1000tallen is in europa dacht ik met punten dus 5.500.000

In Amerika worden er komma's gebruikt om 1000tallen aan te geven.

Als het voor Amerikaans gebruik is heb ik niets gezegd.
 
Maakt niet uit hoe het scheidingsteken eruit ziet, als het er maar staat.
 
Gevonden!

PHP:
function Comma(n)
{
	var delimiter = ",";
	
             	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
              return n;
}
function AndereFunctie()
{
var a=3;
var b=5;
var c=1*3+1*5;
var c=new String(c);
var c=Comma(c);
}
Heb het script een klein beetje aangepast maar ik begrijp nog niet helemaal wat hier gebeurt.

Kan iemand me stap voor stap uitleggen wat er gebeurt? Of een goeie website is ook welkom. :)
 
Hoi,

Je script bevat 2 functies.

De eerste functie (Comma) waaraan je een string (n) meegeeft die je wilt gaan scheiden door komma's:

Eerst declareer je de variabele delimiter, in dit geval een komma, omdat dit je scheidingsteken moet zijn.

Vervolgens maak je een lege array (a) aan waarin je tijdelijk je beginstring gesplitst in gaat opslaan.

Zolang je beginstring (n) groter is dan 3 sla je in de variabele nn de laatste 3 karakters van je beginstring op.
Zet je deze drie karakters in je tijdelijke array a.
En sla je in n de beginstring min de laatste drie karakters op.

Omdat dit in een while lus gebeurt en je net je overgebleven string weer in n hebt opgeslagen zal hij opnieuw deze controle uitvoeren, net zolang tot n kleiner geworden is dan 3.

Als de overgebleven string daarna nog groter is dan 0 zal dit laatste stukje (in de if lus) vooraan in je array geplakt worden.

Hierna staat dus de gehele string n opgesplitst in stukjes van drie en de laatste misschien iets kleiner in de array a.

Daarna wordt in je originele variabele n de array a weer aan elkaar geplakt, maar wordt tussen elk element in de array de delimiter (de komma dus) geplakt en wordt deze nieuwe n geretourneerd.

De funtie AndereFunctie is een beetje vreemd.
Eerst heb je twee variabelen a en b. Daar maak je een rekensommetje van, terwijl de eerste var c dan gelijk wel 8 kan maken, omdat de uitkomst van die rekensom nooit zal veranderen.

Daarna maak je van c een nieuw object String waaraan je die 8 meegeeft.

En dáárna wordt c de uitkomst van de functie Comma waaraan je die nieuwe string meegeeft.

Wat deze functie doet is dus eigenlijk net niks en lijkt mij overbodig.

Je kan gewoon ergens de funtie Comma aanroepen waaraan je de variabele meegeeft die je wilt opsplitsen.

Stap voor stap genoeg..? :D
 
Laatst bewerkt:
Heel erg bedankt Japie!
Ik zit echter nog met enkele vraagjes:
- Begrijp de 'unshift' functie niet zo goed.
- Aangezien 'nn = n.substr(n.length-3)', kan er daarna niet gewoon 'n = n.substr(0,nn)' staan in plaats van 'n = n.substr(0,n.length-3)'?

Wat de 2de functie betreft, in praktijk is die iets ingewikkelder en als ik 'c' niet vernieuw dan krijg ik het resultaat niet te zien.
vb:
PHP:
function AndereFunctie()
{
var a=3;
var b=5;
var c=1*3+1*5;
var d=Math.round(5*c/3);
var d=new String(d);
var d=Comma(d);
}
Als ik de newString weglaat, is het resultaat noppes.

Kan natuurlijk een nieuwe variabele aanmaken, maar dat lijkt me niet echt nodig;
PHP:
function AndereFunctie()
{
var a=3;
var b=5;
var c=1*3+1*5;
var d=Math.round(5*c/3);
var e=new String(d);
var e=Comma(e);
}
 
De unshift methode voegt een string toe aan de voorkant van een array.

Dus een array begint op positie 0 en telt dan verder. Met unshift zet je de string die je meegeeft op positie 0 van de array.

En het tweede punt, dat kan niet, omdat het twee verschillende dingen zijn.

Met 'nn = n.substr(n.length-3)' knip je de laatste drie karakters van n eruit, dat is dus een nieuwe string.
En de methode substring wil twee getalletjes mee krijgen en niet een string.

In een voorbeeldje:

n = 5000
n.substr(n.length-3) = 000
n.substr(0, nn) zou dan n.substr(0, "000") worden en dat werkt niet.
n.substr(0,n.length-3) = 5

Over de AndereFunctie, ik zie er nog steeds het nut niet van in. Waarvoor wordt deze gebruikt?
 
De andere functie bevat allerlei berekeningen en heeft op het eind een 'if' functie om de resultaten weer te geven. In dit script maak ik gebruik van keuzerondjes en de variabele die moet worden weergegeven hangt af van de keuze.
PHP:
function AndereFunctie()
{
var a=3;
var b=5;
var c=document.myForm.Tekstvak.value;
var d=document.myForm.Tekstvak1.value;
var e=1*a+1*b;
var f=1*c+1*d;
var g=Math.round(100*e/15);
var h=Math.round(100*f/15);
var g=new String(g);
var g=Comma(g);
var h=new String(h);
var h=Comma(h);
 {
 if(document..myForm.Keuzerondjes[0].selected==true)
   {document.myForm.Textarea.value=("Resutaat is "+g)}
  else(document..myForm.Keuzerondjes[1].selected==true)
   {document.myForm.Textarea.value=("Resutaat is "+h)}
 }
}
Als ik de 'var g=new String(g)' er vantussen laat dan krijg ik als resultaat 'Het resultaat is ' en dat is alles.
 
Hallo,

De reden waarom er in AndereFunctie een nieuwe string aangemaakt wordt is dat de functie Comma een string verwacht.

Dit is heel eenvoudig op te lossen door gelijk een string mee te geven: Comma("5000")
Dit zal als resultaat 5,000 geven.

Een oplossing kan dus ook zijn:
PHP:
<html>
<head>
<script type="text/javascript">
function Comma(n) {
    var delimiter = ",";
    
    var a = [];
    while(n.length > 3) {
        var nn = n.substr(n.length-3);
        a.unshift(nn);
        n = n.substr(0,n.length-3);
    }
    if(n.length > 0) { 
        a.unshift(n); 
    }
    n = a.join(delimiter);
    return n;
}
</script>
</head>

<body>

<form name="myForm">
<input type="text" name="Tekstvak"><br>
<input type="text" name="Tekstvak1"><br>
<input type="radio" name="radio" value="1" onClick="document.myForm.Textarea.value='Resutaat is '+Comma(document.myForm.Tekstvak.value)"> 1<br>
<input type="radio" name="radio" value="2" onClick="document.myForm.Textarea.value='Resutaat is '+Comma(document.myForm.Tekstvak1.value)"> 2<br>
<input type="text" name="Textarea">
</form>

</body>
</html>
Hierin wordt automatisch een string aan de Comma functie meegegeven, aangezien de functie value altijd een string geeft.

Als je veel radiobuttons hebt is het natuurlijk mooier om hier een functie voor te maken (zoals AndereFunctie, maar dan anders ;))
 
Heel erg bedankt voor de uitleg, Japie!

Er zitten nogal veel berekeningen in m'n script en de 'if' functie heeft nogal veel verschillende mogelijkheden dus ik hou het op een aparte functie om het overzichtelijk te houden.
Ik heb alleszins veel bijgeleerd. :thumb:
 
Een if statement is een functie om "iets" met "iets" te vergelijken, als dit een true oplevert, dan gaat ie iets doen. Dat kan idd heel erg veel zijn :D

Succes verder! :thumb:
 
De oplossing

Ik heb ontdekt dat het ook op deze manier kan:
Voorbeeldschript:
PHP:
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
var getal1=prompt("Hoeveel Slagschepen wil je maken?","Aantal:")
var getal2=getal1*45000
var getal3=getal1*15000
var getal4=getal2/1000
var getal5=getal3/1000
var punt = "."
document.write("Voor "+ getal1 +" aantal Slagschepen heb je "+ getal4 +""+ punt +"000 Metaal en "+ getal5 +""+ punt +"000 Kristal nodig.")
</script>
</body>
</html>
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan