Avatar billede dugi Nybegynder
04. september 2005 - 15:28 Der er 9 kommentarer og
1 løsning

Indsæt punktum hvis string over 5 bogstaver

Hej alle,

Jeg sidder her og laver et "bestillings-system". Når man "checker" et produkt af bliver prisen tilføjet til "total-prisen". Men hvis "total-prisen" er over 5 tal (altså titusende) skal den indsætte et punktum, så prisen går fra xxxxx til xx.xxx - hvis i forstår? :)

Kunne sagtens lave det i PHP, man da jeg ikke er 100% inde i JavaScript, håber jeg ik ma hjælpe mig :)

På forhånd tak.

Med venlig hilsen
Morten Rugaard
Avatar billede dugi Nybegynder
04. september 2005 - 15:34 #1
nevermind, har selv fixet det :)
Avatar billede ellebaek Nybegynder
04. september 2005 - 15:53 #2
:-)

Så smider du bare et svar selv og acceptere det...
Avatar billede dugi Nybegynder
04. september 2005 - 16:09 #3
er det ikke og stjæle point? :o
Avatar billede thesurfer Nybegynder
04. september 2005 - 16:17 #4
Nej, ikke når man selv løser problemet, inden andre er kommet med brugbare løsningen..

Du har den eneste løsning.. som du faktisk skal offentliggøre (jvf reglerne).

Men ellers snupper du bare pointsne selv..

/theSurfer
Avatar billede dugi Nybegynder
04. september 2005 - 16:30 #5
Okay, så kommer løsningen her:

function seperatePrice(input)
{
  if (input.length == 4)
  {
    return input.substring(0,1)+'.'+input.substring(1,4);
  }
  else if (input.length == 5)
  {
    return input.substring(0,2)+'.'+input.substring(2,5);
  }
  else
  {
    return input;
  }
}


Der er garanteret en nemmere måde, men med mine evner gør den funktionen som den skal og hvad jeg har brug for :)
Avatar billede thesurfer Nybegynder
04. september 2005 - 17:19 #6
Her er en funktion, der gerne skulle tage (uendelige?) store beløb:

function seperatePrice(input)
{

// nogle variabler der skal bruges:
var tmp = input + ""; // tmp er bare en streng, der indeholder midlertidige data
var output = ""; // output er en streng, der kommer til at indeholde outputet

// Denne loop læser INPUT bagfra, dvs rækkefølgen bliver omvendt
for (i=0; i < tmp.length+1; i++) // kør loopen fra 0 og til længden af INPUT, plus 1
{
    output = output + tmp.substr(tmp.length-i,1); // hent det sidste tegn fra INPUT
    if (i % 3 == 0 && i != tmp.length) { // hvis det er tredje tegn, og vi ikke er noget slutningen
        output = output + "."; // indsæt "."
    }
}

// Sæt i den rigtige rækkefølge igen:
tmp = output; output = "";
tmp = tmp.substring(1); // hent fra tegn 2, da tegn 1 = "."
for (i=0; i<tmp.length+1;i++){
    output = output + tmp.substr(tmp.length-i,1); // hent det sidste tegn fra TMP
}

return output; // returner værdien
}


Du skriver f.eks. bare seperatePrice(1234567890) eller f.eks. seperatePrice(12345678901234567890)..

/theSurfer
Avatar billede olebole Juniormester
04. september 2005 - 21:29 #7
<ole>

- og ellers fandt jeg dette script blandt mine gamle 'doodlerier'. Det er måske lidt mere fleksibelt:

<script type="text/JavaScript">
function formNumb(num, us_da, numDec) {
  // Use 'da' or 'us' for formatting
  // numDec sets number of decimals
    var dec,decDel,milDel;
    num = num.split(".");
    if (!numDec) numDec = 2;
    dec = (num[1])? num[1] : "";
    decDel = (us_da=="da")? "," : ".";
    milDel = (us_da=="da")? "." : ",";
    for ( var t="",num=num[0],i=num.length-3; num.length>0; i-=3 ) {
        t = num.substr( i ) + ((t!="")? milDel : "") + t;
        num = num.substr( 0, i );
    }
    dec = (dec.length>numDec)? (parseInt(dec.charAt(numDec))>=5)? (parseInt(dec.substr(0,numDec))+1)+"" : dec.substr(0,numDec) : dec;
    while (dec.length<numDec) dec += "0";
    return t + decDel + dec;
}
</script>

Formaterer et tal på formen: 123456.25 til enten:<br>
[da]: 123.456,25<br>
eller:<br>
[us]: 123,456.25

<br><br>

<input type="text" id="number" value="1234567890.25">
<button onclick="alert( 'da: '+formNumb(number.value, 'da') );alert( 'us: '+formNumb(number.value, 'us') )">Formater</button>

/mvh
</bole>
Avatar billede roenving Novice
05. september 2005 - 02:59 #8
Tjah, eller denne, som ,såvidt jeg husker, er inspireret af en phoenixv-ide:

function ins1000Sep(val){
  val = val.split(",");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].replace(/(\d{3})/g,"$1.");
  val[0] = val[0].split("").reverse().join("");
  val[0] = val[0].indexOf(".")==0?val[0].substring(1):val[0];
  return val.join(",");
}

-- den er dog rent dansk/central-europæisk !-)
Avatar billede dugi Nybegynder
05. september 2005 - 06:39 #9
mange fine scripts.
Men gider ikke rigtig ændre scriptet nu, da jeg ved prisen ikke kan blive højere end 5 cifret, men altid rart med input, hvis jeg skal bruge en mere fleksibel funktion i fremtiden. Tak til alle :)
Avatar billede krydset Nybegynder
05. september 2005 - 06:53 #10
lkklklklk
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