09. juli 2006 - 11:24Der er
21 kommentarer og 1 løsning
Mange tal ganges med en faktor
Jeg har nogle sider, hvor der er mange tal (beløb med to decimaler = ##.###,##) Jeg ville gerne sætte det op så jeg i koden (headeren) kunne sætte gangefaktoren, som valutaberegning: tal*faktor (faktoren har også to decimaler). Det skal så gerne slår igennem på alle de indtastede tal.
Er der nogen der har en idé om hvordan jeg kan gribe det an?
Tallene står i brødtekst, som f.eks 650,00, og så forestiller jeg mig at der kunne siges 650,00*faktor i HTML-teksten, som hvis faktoren var 2,00 ville resultatet altså blæive 1.300,00
//læg alle spans i dokumentet ind i spans spans=document.getElementsByTagName("span");
//læg de spans hvis id=tal ind i talSpans for(i=0;i<spans.length;i++) { if(spans[i].getAttribute('id')=="tal") { talSpans.push(spans[i]); } }
//tjek om hver enkelt talspan indeholder et nummer efter pattern-skabelonen, //og læg dem der gør ind i results. //Alle i'erne lægges ind i positivities.
//gang alle results med factor og indsæt dem i dokumentet. for(i=0;i<results.length;i++) { results[i]=results[i].replace(/\,/g,".")+0; talSpans[i].innerHTML=(results[i]*factor)+0; } } </script>
for at ændre det som tallene skal ganges med ændrer du bare i factor. Alle tal skal have formatet <span id="tal">##,##</span>? (der må self gerne være flere numre end i eksemplet, heltallet er op til 10 cifre og decimalerne er op til 2). Hvis der skal være "forståelses-punktum" ala 1.123,12 i tallene må du sige det.
Nu har jeg lavet det med . ved hvert 3. ciffer, men jeg kan ikke få den til at lave 2 nuller hvis der ikke er decimaler. Er det meget vigtigt? Her er koden: <script type="text/javascript"> function readingComma(num) { num+=""; splitted=num.split('.'); spl1=splitted[0]; spl2=splitted.length>1?"."+splitted[1]:''; var pattern=/(\d+)(\d{3})/; while(pattern.test(spl1)) { spl1=spl1.replace(pattern, '$1' + '.' + '$2'); } return spl1+spl2; }
//hvis Array.push ikke findes if (typeof Array.prototype.push == 'undefined') { Array.prototype.push=function(txt) { return this[this.length]=txt; } }
function factorNums() { //init factor=2;
pattern=/[0-9]{1,10}\,[0-9]{0,2}/g; talSpans=new Array; results=new Array; //læg alle spans i dokumentet ind i spans spans=document.getElementsByTagName("span");
//læg de spans hvis id=tal ind i talSpans for(i=0;i<spans.length;i++) { if(spans[i].getAttribute('id')=="tal") { talSpans.push(spans[i]); } }
//tjek om hver enkelt talspan indeholder et nummer efter pattern-skabelonen, //og læg dem der gør ind i results.
//gang alle results med factor og indsæt dem i dokumentet. for(i=0;i<results.length;i++) { results[i]=(results[i].replace(/\,/g,"."))*factor; temp=readingComma(results[i]); temp=temp.split("."); ret=""; for(a=0;a<temp.length;a++) { if(a==temp.length-2) { ret+=temp[a]+","; }
Hovsa- igår postede jeg et svar med rettelse, men eksperten har åbenbart misset det. Her kommer det. Jeg har fundet fejlen, og rettet koden så man kan nøjes med at skrive ## i stedet for ##,00 som heltal i klarteksten. Scriptet skulle gerne virke helt nu.
<script type="text/javascript"> function correctDecimals(tal) //problem: kommaerne i input forstyrrer. RET DET! { tal=tal+""; if (typeof(tal)==String)tal=parseFloat(tal); if(tal.substring(tal.length-4).match(/\,[0-9][0-9]/)) return tal; talTx="_"+Math.round( 100.0*tal)+"_"; if (talTx.length<5) { preZero="_000"; talTx=preZero.substring(0,6-talTx.length)+talTx.substring(1); } talTx=talTx.substring(1,talTx.length-3)+","+talTx.substring(talTx.length-3,talTx.length-1); tal=talTx;
function readingComma(num) { num+=""; splitted=num.split('.'); spl1=splitted[0]; spl2=splitted.length>1?"."+splitted[1]:''; var pattern=/(\d+)(\d{3})/; while(pattern.test(spl1)) { spl1=spl1.replace(pattern,'$1'+'.'+'$2'); } return spl1+spl2; }
//hvis Array.push ikke findes if (typeof Array.prototype.push == 'undefined') { Array.prototype.push=function(txt) { return this[this.length]=txt; } }
function factorNums() { //init factor=584.94 ;
numberInitPattern=/[0-9]{1,10}\,[0-9]{0,2}/g; talSpans=new Array; results=new Array; //læg alle spans i dokumentet ind i spans spans=document.getElementsByTagName("span");
//læg de spans hvis id=tal ind i talSpans for(i=0;i<spans.length;i++) { if(spans[i].getAttribute('id')=="tal") { talSpans.push(spans[i]); } }
//tjek om hver enkelt talspan indeholder et nummer efter numberInitPattern-skabelonen, //og læg dem der gør ind i results.
//gang alle results med factor og indsæt dem i dokumentet. for(i=0;i<results.length;i++) { temp=""; results[i]=(results[i].replace(/\,/g,"."))*factor; talSpans[i].innerHTML=readingComma(correctDecimals(results[i])); } }
function correctDecimals(tal) { tal=tal+""; if (typeof(tal)==String)tal=parseFloat(tal); if(tal.substring(tal.length-4).match(/\,[0-9][0-9]/)) return tal; talTx="_"+Math.round( 100.0*tal)+"_"; if (talTx.length<5) { preZero="_000"; talTx=preZero.substring(0,6-talTx.length)+talTx.substring(1); } talTx=talTx.substring(1,talTx.length-3)+","+talTx.substring(talTx.length-3,talTx.length-1); tal=talTx;
return tal; }
function readingComma(num) { num+=""; splitted=num.split('.'); spl1=splitted[0]; spl2=splitted.length>1?"."+splitted[1]:''; var pattern=/(\d+)(\d{3})/; while(pattern.test(spl1)) { spl1=spl1.replace(pattern,'$1'+'.'+'$2'); } return spl1+spl2; }
//hvis Array.push ikke findes if (typeof Array.prototype.push == 'undefined') { Array.prototype.push=function(txt) { return this[this.length]=txt; } } </script>
...det er rigtigt at der var en anden der kigge på det, men det blev desværre aldrig færdig. Jeg syntes det var en lille sag, men det er det åbenbart ikke!
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.