24. oktober 2009 - 22:23Der 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>
Fjern tusindtalsseparator, og erstat komma med punktum. Læg så de tre tal sammen i javascript, og konverter resultatet tilbage til komma og tusindtalseparator.
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.
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>
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>
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.
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.
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.
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,".") }
Synes godt om
Ny brugerNybegynder
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.