Avatar billede nemlig Professor
24. oktober 2009 - 22:23 Der er 14 kommentarer og
1 løsning

Sammenlægge 3 inputfelter med dansk formaterede tal

Hejsa.
Jeg håber på hjælp til hvordan man sammenlægger tallene i 3 inputfelter. Tallene er danskformaterede med tusindtalsseperator og 2 decimaler.
Sammenlægningen skal også vises med dansk formatering.
Håber på konkret hjælp eller henvisning til god vejledning.

Min testkode ser sådan her ud:
<form>
Tal1: <input type='text' name='tal_1' value='2.545,25'><br>
Tal2: <input type='text' name='tal_2' value='900,00'><br>
Tal3: <input type='text' name='tal_3' value='75,75'><br>
Resultat: <input type='text' readonly='readonly' name='resultat'><br>
</form>
Avatar billede erikjacobsen Ekspert
24. oktober 2009 - 22:35 #1
Fjern tusindtalsseparator, og erstat komma med punktum. Læg så de tre tal sammen i javascript, og konverter resultatet tilbage til komma og tusindtalseparator.
Avatar billede nemlig Professor
24. oktober 2009 - 22:44 #2
Jo tak Erik - det kan jeg finde ud af i PHP, men Javascript er desværre helt nyt for mig.
Jeg skal lave mange udregninger, hvorfor jeg håber på en løsning på ovenstående simple eksempel. Så har jeg noget at tage udgangspunkt i og videreudvikle.
Avatar billede erikjacobsen Ekspert
24. oktober 2009 - 22:56 #3
Det med at konvertere tilbage til 1000-tals separatorer har jeg ikke lige, men resten: http://n0p.com/890549.html
Avatar billede nemlig Professor
24. oktober 2009 - 23:24 #4
Tak for det Erik, men jeg er ked af at jeg ikke har forklaret mig godt nok - det ser jeg desværre først nu, hvor du har lavet en løsning.

Jeg søger en løsning, hvor resultatet automatisk opdateres, når input-felterne udfyldes.
Altså vist nok noget med onchange='f(this.form)' i de 3 inputfelter.
Jeg har prøvet dette, men resultatet afleveres.

<hmtl>
<body>

<script  type="text/javascript">
  function f() {
    var tal1=document.getElementById("tal_1").value;
    var tal2=document.getElementById("tal_2").value;
    var tal3=document.getElementById("tal_3").value;
    tal1 = tal1.replace(/\./g,"").replace(/,/,".")-0;
    tal2 = tal2.replace(/\./g,"").replace(/,/,".")-0;
    tal3 = tal3.replace(/\./g,"").replace(/,/,".")-0;
    document.getElementById("resultat").value=tal1+tal2+tal3;
  }
</script>
       

<form>
Tal1: <input type='text' onchange='f(this.form)' id="tal_1" name='tal_1' value='2.545,25'><br>
Tal2: <input type='text' onchange='f(this.form)' id="tal_2" name='tal_2' value='900,01'><br>
Tal3: <input type='text' onchange='f(this.form)' id="tal_3" name='tal_3' value='75,75'><br>
Resultat: <input type='text' readonly='readonly' id="resultat" name='resultat'><br>
</form>


</body>
</html>
Avatar billede ebusiness Nybegynder
24. oktober 2009 - 23:36 #5
Funktion til at lægge danske streng-tal sammen som returnerer dansk tal. Den æder også tal-tal.

function adder(){
    var a
    var tal=0
    var len=arguments.length
    for(a=0;a<len;a++){
        if(typeof(arguments[a])=="string"){
            tal+=100*arguments[a].replace(/\./g,"").replace(/\,/g,".")
        }
        else{
            tal+=100*arguments[a]
        }
    }
    tal=""+Math.floor(tal)
    if(tal=="NaN"){
        tal="000"
        //return null //fjern udkommentering for at returnere null i tilfælde af ugyldigt input
    }
    while((len=tal.length)<3){
        tal="0"+tal
    }
    tal=tal.split("")
    tal[len-2]=","+tal[len-2]
    for(a=len-5;a>0;a-=3){
        tal[a]="."+tal[a]
    }
    return tal.join("")
}

Eksempel på brug:
alert(adder(10.5,"30.000,5","20,00"))

Du vil nok skulle bruge en wrapperfunktion til dit specifikke tilfælde. Jeg erstatter lige lidt i erikjacobsens kode:

<script  type="text/javascript">
function adder(){
    var a
    var tal=0
    var len=arguments.length
    for(a=0;a<len;a++){
        if(typeof(arguments[a])=="string"){
            tal+=100*arguments[a].replace(/\./g,"").replace(/\,/g,".")
        }
        else{
            tal+=100*arguments[a]
        }
    }
    tal=""+Math.floor(tal)
    if(tal=="NaN"){
        tal="000"
        //return null //fjern udkommentering for at returnere null i tilfælde af ugyldigt input
    }
    while((len=tal.length)<3){
        tal="0"+tal
    }
    tal=tal.split("")
    tal[len-2]=","+tal[len-2]
    for(a=len-5;a>0;a-=3){
        tal[a]="."+tal[a]
    }
    return tal.join("")
}
    function f() {
        document.getElementById("resultat").value=adder(document.getElementById("tal_1").value,document.getElementById("tal_2").value,document.getElementById("tal_3").value)
    }
</script>
       

<form>
Tal1: <input type='text' id="tal_1" name='tal_1' value='2.545,25'><br>
Tal2: <input type='text' id="tal_2" name='tal_2' value='900,01'><br>
Tal3: <input type='text' id="tal_3" name='tal_3' value='75,75'><br>
Resultat: <input type='text' readonly='readonly' id="resultat" name='resultat'><br>
<input type="button" value="Blop" onclick="f()">
</form>
Avatar billede ebusiness Nybegynder
24. oktober 2009 - 23:38 #6
Og det du så skal bruge er onchange='f()'
Avatar billede nemlig Professor
24. oktober 2009 - 23:59 #7
Super - så fungerer det.

Hvad er det nu, som skal til, hvis den skal regne allerede ved indlæsningen af siden. Er det noget med onload.....

Og jeg har faktisk også brug for en sammenlægningsfunktion mere, hvor der ikke skal vises tusindtalsseperator og kun 1 decimal. Den komme lige om lidt i et spørgsmål mere.
Avatar billede ebusiness Nybegynder
25. oktober 2009 - 00:10 #8
Du kan bare indsætte et kald til f() i en script blok i slutningen af body.

Har du i øvrigt overvejet at sætte dig lidt ind i koden så du selv kan rette i den? Hvis du kan skrive PHP så er der ikke så langt til JavaScript.
Avatar billede nemlig Professor
25. oktober 2009 - 00:20 #9
Ja - jeg har absolut overvejet det. Jeg er bare lidt presset lige nu, hvorfor jeg slet ikke har forholdt mig til det endnu.
Men du har leveret en del nu, og jeg har således en del at fordybe mig i.
Lige nu kigger jeg faktisk på din adder-funktion, da jeg lige har opdaget at jeg skal trække tal_2 fra tal_1.
Avatar billede ebusiness Nybegynder
25. oktober 2009 - 00:48 #10
adder("-"+strengvaerdi,-talværdi)

Og så lige en rettelse så funktionen kan klare dobbeltnegerede tal:
tal+=100*arguments[a].replace(/\./g,"").replace(/\,/g,".").replace(/--/g,"")
Avatar billede nemlig Professor
25. oktober 2009 - 00:57 #11
adder("-"+strengvaerdi,-talværdi)

Den er jeg ikke helt med på.
Jeg skal trække tal_2 fra tal_1 og har ændret
ændret f() til:
function f() {
  document.getElementById("resultat").value=adder(document.getElementById("tal_1").value,document.getElementById("tal_2").value)
}
Jeg er selvfølgelig godt klar over at de stadig adderes.
Avatar billede ebusiness Nybegynder
25. oktober 2009 - 01:15 #12
function f() {
document.getElementById("resultat").value=adder(document.getElementById("tal_1").value,"-"+document.getElementById("tal_2").value)
}
Avatar billede ebusiness Nybegynder
25. oktober 2009 - 01:16 #13
Og så skal du bruge funktionen i det næste spørgsmål hvis den også skal kunne håndtere negativt output.
Avatar billede nemlig Professor
25. oktober 2009 - 01:21 #14
Fedt nok - så fungerer det.
Og lige sidste lille ting.
Hvad jeg skal multiplicere de 2 tal, så er det en helt anden funktion vi snakker om - ik?
Avatar billede ebusiness Nybegynder
25. oktober 2009 - 02:07 #15
Det kan være at du lige skal have en streng -> tal funktion, så kan du udføre den matematik du ønsker.

function tiltal(str){
    return 1*str.replace(/\./g,"").replace(/\,/g,".")
}
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