Volledige versie bekijken : 1.000.000 ipv 1000000 (" . " ertussen !! )
ikasu
%Europe/Berlin %492 %2006, 12:49
Hallo!
Ik heb een probleem met de leesbaarheid van grote getallen. Mensen hebben vaak de drang om grote getallen te schrijven met een punt er tussen. Bv:
1 miljoen = 1000000 => 1.000.000
Omdat mijn flashproject ook zeer grote getallen uitdrukt wil ik graag deze getallen in een speciale functie met een return (van het type String)plaatsen voordat het een LABEL of TextField/Area in gaat.
Deze functie moet er voor zorgen dat het weet (hoe lang/hoe groot) het getal is en waar
de punt of punten moeten komen te staan.
1000 -> 1.000 : ( 1x een "punt" (op positie: index[1]???))
1000000 -> 1.000.000 : ( 2x een "punt" (op positie: index[1] en [5]???))
1000000000 -> 1.000.000.000 : ( 3x een "punt" (op positie: index[1] , [5] en [9]???))
*Het kan overigens een willekeurig getal zijn bv 1348394. Dit moet dan 1.348.394 worden.
De lengte van een getal kan ik uitlezen aan de hand van String.length() nadat het getal heb omgezet in het type String.
Daarna wordt het lastiger.... misschien moet ik de string splitten in substrings???
Kortom... ik zit een beeeetje vast. Misschien wil iemand meedenken??
Alvast bedankt!!
marcvz
%Europe/Berlin %506 %2006, 13:08
getal = substring(getal,1,1)+"."+substring(getal,2,3)+"."+substring(getal,5,3)
Zoiets, en dan met wat if statement naar hand van de lengte van het getal.
Loma
%Europe/Berlin %540 %2006, 13:57
kan je geen gebruik maken van modulo?
't is het % teken
in combinatie met / moet het wel lukken het getal op te delen in 1000-tallen
FredHeusschen
%Europe/Berlin %597 %2006, 15:20
getal = 1000000;
// code:
G = String(getal);
GI = new Array();
GI = G.split("");
lengte = GI.length;
nr = lengte - 1;
newGetal = String(GI[nr]);
while (nr >= 0) {
if (test()) {
newGetal = GI[nr] + "." + newGetal;
} else {
newGetal = GI[nr] + "" + newGetal;
}
nr--;
}
function test() {
if (lengte - nr == 3) {
return true;
} else if (lengte - nr == 6) {
return true;
} else if (lengte - nr == 9) {
return true;
} else if (lengte - nr == 12) {
return true;
} else if (lengte - nr == 15) {
return true;
} else {
return false;
}
}
trace(newGetal);
wauw, het werkt.... :)
de variabele 'newGetal' geeft de uitkomst weer (met punten).
zo kan ie getallen van maximaal 17 digits aan, om nog meer te kunnen moet je even de functie 'test' uitbreiden.
Succes!
Dauntless
%Europe/Berlin %649 %2006, 16:34
var getal:Number = 990000000;
function placeDots(p_number:Number):String
{
var number:Number = p_number;
var counter:Number = 0;
while(true)
{
if(number % 1000 == 0)
{
counter++;
number = number / 1000;
}
else
{
break;
}
}
var str:String = String(number);
for(var i:Number = 0; i<counter; i++) str += ".000";
return str;
}
trace(placeDots(getal));
Ondersteunt oneindig veel nullen ;) :).
ikasu
%Europe/Berlin %762 %2006, 19:18
Enorm bedankt voor jullie hulp.
Dit is wat ik heb gedaan...misschien niet geheel logisch maar het werkt wel
function metStip(eenString:String):String
{
var dezeString:String = eenString;
var dezeLengte:Number = dezeString.length;
if(dezeLengte < 4)
{
return dezeString;
}
else if((dezeLengte >= 4) && (dezeLengte <= 6))
{
var startSliceEen:Number = dezeLengte - 3;
var duizend:String = dezeString.slice(startSliceEen, dezeLengte);
var grondTal:String = dezeString.slice(0, startSliceEen);
return grondTal + "." + duizend;
}
else if((dezeLengte >= 7) && (dezeLengte <= 9))
{
var startSliceEen:Number = dezeLengte - 3;
var startSliceTwee:Number = dezeLengte - 6;
var duizend:String = dezeString.slice(startSliceEen, dezeLengte);
var miljoen:String = dezeString.slice(startSliceTwee, startSliceEen);
var grondTal:String = dezeString.slice(0, startSliceTwee);
return grondTal + "." + miljoen + "." + duizend;
}
else if((dezeLengte >= 10) && (dezeLengte <= 12))
{
var startSliceEen:Number = dezeLengte - 3;
var startSliceTwee:Number = dezeLengte - 6;
var startSliceDrie:Number = dezeLengte - 9;
var duizend:String = dezeString.slice(startSliceEen, dezeLengte);
var miljoen:String = dezeString.slice(startSliceTwee, startSliceEen);
var biljoen:String = dezeString.slice(startSliceDrie, startSliceTwee);
var grondTal:String = dezeString.slice(0, startSliceDrie);
return grondTal + "." + biljoen + "." + miljoen + "." + duizend;
}
else((dezeLengte >= 13) && (dezeLengte <= 15))
{
var startSliceEen:Number = dezeLengte - 3;
var startSliceTwee:Number = dezeLengte - 6;
var startSliceDrie:Number = dezeLengte - 9;
var startSliceVier:Number = dezeLengte - 12;
var duizend:String = dezeString.slice(startSliceEen, dezeLengte);
var miljoen:String = dezeString.slice(startSliceTwee, startSliceEen);
var biljoen:String = dezeString.slice(startSliceDrie, startSliceTwee);
var triljoen:String = dezeString.slice(startSliceVier, startSliceDrie);
var grondTal:String = dezeString.slice(0, startSliceVier);
return grondTal + "." + triljoen +"." + biljoen + "." + miljoen + "." + duizend;
}
}
Ik geef eerlijk toe dat ie van Dauntless veel beter is ;)
Dauntless
%Europe/Berlin %767 %2006, 19:25
Lol... dat is toch echt wel erg omslachtig :p.
Quibuzz
%Europe/Berlin %785 %2006, 19:51
Waarom niet zoiets:
var getal = String(1001231455100); // je getal hierin
var nieuwgetal = ""; //dit wordt je getal met puntjes ertussen
while ( getal.length > 3 ) {
nieuwgetal = "." + getal.slice ( getal.length - 3, getal.length ) + nieuwgetal;
getal = getal.slice ( 0, getal.length - 3);
}
//laatste stukje er nog even aanplakken
nieuwgetal = getal + nieuwgetal;
trace (nieuwgetal);
Dauntless
%Europe/Berlin %857 %2006, 21:35
Dacht wel dat het nog een stuk eenvoudiger kon ...
Leuk ASje, Quibuzz :)
FredHeusschen
%Europe/Berlin %339 %2006, 09:08
da's wel wat makkelijker idd.....
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.