Avatar billede stener Nybegynder
12. december 2006 - 12:28 Der er 17 kommentarer og
2 løsninger

Convertering af tal

Hvordan laver jeg den her om så den retunere:

1    bliver til 1.00
1.4  bliver til 1.40
100  bliver til 100.00
1000  bliver til 1,000.00
10000 bliver til 10,000.00

osv

function toDec(t) {
      t = t+"";
      t = t.split(".");
      if (t.length<2) return t + ".00";
      if (t[1].length<2) return t.join(".")+"0";
      t[1] = Math.round( t[1].substr(0,2)+"."+t[1].substr(2) );
      return t.join(".");
      }

Mvh

Steen
Avatar billede kinderaeg Nybegynder
12. december 2006 - 13:07 #1
function CommaFormatted(amount)
{
  var delimiter = ","; // replace comma if desired
  var a = amount.split('.',2);
  if (a.length > 1) {
    var d = a[1];
  } else {
    var d = "";
  }
  var i = parseInt(a[0]);
  if(isNaN(i)) { return ''; }
  var minus = '';
  if(i < 0) { minus = '-'; }
  i = Math.abs(i);
  var n = new String(i);
  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);
  if(d.length < 1) { amount = n; }
  else if(d.length == 1) { amount = n + '.' + d + "0"; }
  else { amount = n + '.' + d; }
  amount = minus + amount;
  return amount;
}
Avatar billede coderdk Praktikant
12. december 2006 - 13:20 #2
Alternativt:

function toDec(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    if ( x2.length == 0 )
        x2 = '.00';
    if ( x2.length == 2 )
        x2 += '0';
    if ( x2.length > 3 )
        x2 = '.' + Math.ceil(((nStr-x1)*100))
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1))
        x1 = x1.replace(rgx, '$1,$2');
    return x1 + x2;
}
Avatar billede stener Nybegynder
12. december 2006 - 13:33 #3
kinderaeg tak for dit svar men det virkede ikke helt korrekt.

Coderdk din løsning er perfekt.

Smid et svar begge to så i kan få nogle points.

Tak for hjælpen :)
Avatar billede coderdk Praktikant
12. december 2006 - 13:36 #4
Ok :)
Avatar billede stener Nybegynder
12. december 2006 - 13:37 #5
Ved i om det er muligt at ændre en dropdown boks uden at reloade siden så den måde den er sorteret på bliver ændret.
Avatar billede elskermad.dk Nybegynder
12. december 2006 - 13:41 #6
hvad med at bruge phps egen funktion?

http://dk2.php.net/number_format
Avatar billede coderdk Praktikant
12. december 2006 - 13:42 #7
elskermad.dk, Hvem siger han bruger php? Den er trods alt postet i javascriptkategorien :)
Avatar billede luzk Nybegynder
12. december 2006 - 13:43 #8
Bare for hyggens skyld kommer der lige et tredje alternativ der benytter toFormat :)

<html>
<head><title>test</title>
<script language="JavaScript"    >
    function format(value)
    {
        var returnVal = ""; //retur container
        var tmpval = value.toFixed(2).split("."); //benyt toFixed til autoformat af decimal. Derefter lav array
        for(var i= tmpval[0].length, j = 0 ; i>=0; i-- , j++) //loop alle chars i heltallet
        {
            returnVal = tmpval[0].charAt(i) + returnVal; //byg retur streg - start fra slutningen
            if(j%3 == 0 && j != 0 && i != 0) //for hvert tredje tal (fra slutningen) indsæt komma, hvis det ikke er i starten af strengen
              returnVal = "," + returnVal;
        }
             
        return returnVal + "." + tmpval[1]; //returner heltal plus brøk
    }
</script>
   
</head>
<body>

<script language="JavaScript">
    var test = format(1000.371);
    document.write(test);
</script>
</body>
</html>

/Lusk
Avatar billede luzk Nybegynder
12. december 2006 - 13:44 #9
toFixed even...
Avatar billede coderdk Praktikant
12. december 2006 - 13:47 #10
stener, Her er et eksempel der fjernet et element, og tilføjer et nyt:

<form>
    <select name="sel" id="sel">
        <option value="hej">hej</option>
    </select>
</form>
<script type="text/javascript">
  window.onload = function() {
      s = document.getElementById("sel");
      s.remove(0);
      s.options[s.options.length]=new Option("text","værdi");
  }
</script>
Avatar billede kinderaeg Nybegynder
12. december 2006 - 13:47 #11
Svar
Avatar billede luzk Nybegynder
12. december 2006 - 13:48 #12
btw der er en enkelt lille ting med Math.ceil - der bliver ikke rundet korrekt op, så ved fx 10.743 bliver resultatet 10.75, selvom det burde være 10.74, så hvis det er super vigtigt resultatet er korrekt afrundet, vil jeg foreslå toFixed benyttes

/Lusk
Avatar billede coderdk Praktikant
12. december 2006 - 13:49 #13
luzk, Du har ret, det skulle naturligvis være Math.round ;)
Avatar billede luzk Nybegynder
12. december 2006 - 13:53 #14
coderdk: du har ret - den kan selvfølgelig også gøre det :) Jeg er bare så glad for toFixed *G*

Så lige en pernyttengrin - der er ikke nogen af løsningerne der helt korrekt håndterer negative tal (heller ikke min egen) men vil mene der bare skal pilles lidt, så kan de komme til det allesammen (men selvfølgelig ikke grund til det hvis negativetal aldrig forekommer)

/Lusk
Avatar billede coderdk Praktikant
12. december 2006 - 13:57 #15
hehe yeah :)

Denne burde kunne klare negative tal:

function toDec(nStr)
{
    neg = 0;
    if ( nStr < 0 )
    {
        neg = 1;
        nStr *= -1;
    }
    n = nStr;
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    if ( x2.length == 0 )
        x2 = '.00';
    if ( x2.length == 2 )
        x2 += '0';
    if ( x2.length > 3 )
        x2 = '.' + Math.ceil(((n-x1)*100))
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1))
        x1 = x1.replace(rgx, '$1,$2');
    return (neg == 1 ? '-' : '' ) + x1 + x2;
}
Avatar billede coderdk Praktikant
12. december 2006 - 14:00 #16
For lige at få rettet fejlen luzk gjorde mig opmærksom på:

function toDec(nStr)
{
    neg = 0;
    if ( nStr < 0 )
    {
        neg = 1;
        nStr *= -1;
    }
    n = nStr;
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    if ( x2.length == 0 )
        x2 = '.00';
    if ( x2.length == 2 )
        x2 += '0';
    if ( x2.length > 3 )
        x2 = '.' + Math.round(((n-x1)*100))
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1))
        x1 = x1.replace(rgx, '$1,$2');
    return (neg == 1 ? '-' : '' ) + x1 + x2;
}
Avatar billede luzk Nybegynder
12. december 2006 - 14:00 #17
Smider lige en opdatering til min også, hvis der en dag skulle være en der forvilder sig til at bruge den :)

function format(value)
    {
        var returnVal = ""; //retur container
        var tmpval = value.toFixed(2).split("."); //benyt toFixed til autoformat af decimal. Derefter lav array
        for(var i= tmpval[0].length, j = 0 ; i>=0; i-- , j++) //loop alle chars i heltallet
        {
            returnVal = tmpval[0].charAt(i) + returnVal; //byg retur streg - start fra slutningen
            if(j%3 == 0 && j != 0 && i != 0 && tmpval[0].charAt(i-1) != '-') //for hvert tredje tal (fra slutningen) indsæt komma, hvis det ikke er i starten af strengen
              returnVal = "," + returnVal;
        }
        return returnVal + "." + tmpval[1]; //returner heltal plus brøk
    }

/Lusk
Avatar billede elskermad.dk Nybegynder
12. december 2006 - 14:45 #18
hehe, der kan man bare se - var ellers til optiker i morges :) men de nye linser er selvfølgelig heller ikke kommet endnu! c",)
Avatar billede roenving Novice
25. december 2006 - 02:16 #19
-- og en gammel genial algoritme til indsættelse af tusind-separatorer:

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(",");
}
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