Avatar billede jpeace Nybegynder
11. juni 2010 - 16:25 Der er 1 kommentar og
1 løsning

Beløb med tusind tals separator og decimal

Hej,
Jeg har ledt efter noget pænt javascript som kan tage et tal/beløb fra en TextBox og sørge for tusindtals separatorer samt kommatal.

Jeg har fundet nogle script men der har været fejl eller uhensigtsmæssigheder i dem jeg har afprøvet.

Det jeg skal bruge er:
input: 12345,67
Formatteret: 12.345,67

Og går man tilbage i feltet og ud igen skal det stadig virke.

Udvikler i ASP.NET. Hvor jeg kun må bruge så lidt javascript som muligt. Så kan ikke bruge jQuery og lign.

Har forsøgt med nedenstående kode.
Men der er en fejl. Første gang man forlader et felt er det korrekt. Men går man ind igen fejler tal større end 1000 pga. tusindtals separatoren.

F.eks. 12345.67 bliver først korrekt til 12,345.67. Men anden gang man går ind til 345.67.

Koden skal selvfølgelig laves om ift. dansk og amerikansk punktum/komma.

Nu er jeg ret ny til javascript, men jeg vil mene at der burde findes noget stabilt kode derude et sted :-)

function formatNumber (obj, decimal) {
    //decimal  - the number of decimals after the digit from 0 to 3
    //-- Returns the passed number as a string in the xxx,xxx.xx format.
      anynum=eval(obj.value);
      divider =10;
      switch(decimal){
            case 0:
                divider =1;
                break;
            case 1:
                divider =10;
                break;
            case 2:
                divider =100;
                break;
            default:      //for 3 decimal places
                divider =1000;
        }

      workNum=Math.abs((Math.round(anynum*divider)/divider));

      workStr=""+workNum

      if (workStr.indexOf(".")==-1){workStr+="."}

      dStr=workStr.substr(0,workStr.indexOf("."));dNum=dStr-0
      pStr=workStr.substr(workStr.indexOf("."))

      while (pStr.length-1< decimal){pStr+="0"}

      if(pStr =='.') pStr ='';

      //--- Adds a comma in the thousands place. 
      if (dNum>=1000) {
          dLen=dStr.length
          dStr=parseInt(""+(dNum/1000))+","+dStr.substring(dLen-3,dLen)
      }

      //-- Adds a comma in the millions place.
      if (dNum>=1000000) {
          dLen=dStr.length
          dStr=parseInt(""+(dNum/1000000))+","+dStr.substring(dLen-7,dLen)
      }
      retval = dStr + pStr
      //-- Put numbers in parentheses if negative.
      if (anynum<0) {retval="("+retval+")";}

    //You could include a dollar sign in the return value.
      //retval =  "$"+retval
      obj.value = retval;
}
Avatar billede intenz Novice
11. juni 2010 - 18:31 #1
Jeg har brygget en sammen til dig. Prøv at se om det opfylder behovet.


<script>
function format_number(e) {
    var val = e.value.replace(/\./g, '');
    var dec_pos = val.indexOf(',', val);
    var number = (dec_pos != -1) ? val.substr(0, dec_pos) : val;
    var reversed = number.split("").reverse();
    var newNum = '';

    for (var i=0; i<reversed.length; i++) {
        if (i != 0 && (i % 3) == 0) {
            newNum = '.'+newNum;
        }
        newNum = reversed[i]+newNum;;
    }

    if (dec_pos != -1) {
        newNum += val.substr(dec_pos, (val.length-dec_pos));
    }

    e.value = newNum;
}
</script>
<input type="text" onkeyup='format_number(this);' />
Avatar billede jpeace Nybegynder
18. juni 2010 - 14:22 #2
Mange tak for det. Det virker fint. Dog har jeg brug for at der skal være 2 decimaler på fast: 1.234,50  eller 1.234,00.

ved godt at det ikke fremgik helt klart af mit spørgsmål.

Det ville være fedt at få det med også, men ellers skal jeg nok give dig points alligevel.
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