17. august 2006 - 17:49Der er
37 kommentarer og 1 løsning
formatering med tusindeseperator
Hej Eksperter,
Jeg har ingen erfaring med Javascript men har en tal variabel der skal formateres så fx 1000000 vises 1,000,000. Nedenfor vises koden: function calc2() { var t1 = document.koeb_bud.maengde; var t2 = document.koeb_bud.unit_price; var resultat = 0;
Som i nok kan se så er det variablen resultat der skal formateres til at vises med tusinde seperator. Jeg har i forvejen formateres tallet så der ikke medtages decimaler.
- Hvis t1's værdi ikke er tom, skal den ganges med t2's værdi, som KAN være som - Hvis t2's værdi ikke er tom, skal den ganges med t1's værdi, som KAN være som
Det ser ikke sæligt logisk ud..
Og hvad gør du, hvis både t1's værdi og t2's værdi er tom? - Så har du et problem, da "resultat" ikke eksisterer, men den vil alligevel prøve på at sætte koeb_bud.bud_nu.value til resultatets værdi..
hehe, forstår godt du synes det ser ret ulogisk ud med de to if statements men scriptet fungerer perfekt på den form jeg kalder funktionen. Problemet er bare at selve tallet (resultat) skal formateres til at indeholde tusindeseperator. Hvis du kan svare på det er du en helt.
Og hvad gør du, hvis både t1's værdi og t2's værdi er tom? - Så har du et problem, da "resultat" ikke eksisterer, men den vil alligevel prøve på at sætte koeb_bud.bud_nu.value til resultatets værdi.. --> Scriptet bruges til at lave realtime udregning i et budsystem og maengde eksisterer altid da det hentes fra db og unit_price er det brugeren selv indtaster så at begge felter er tomme vil aldrig forekomme.
Uden at have testet tror jeg du skal lege med noget alá nedenstående:
function format(iValue) { var sResult = ""; var iTmp = iValue; while (iTmp != 0) { iMod = iTmp % 1000;//Rest ved division med 1000 iTmp = (iTmp - iMod) / 1000;//Fjern tusinder fra iTmp sResult = iTmp == 0 ? iMod + sResult : "," + appendZero(iMod) + sResult;//appendZero skal sikre at der er det korrekte antal 0'er så f.eks. 99 bliver til 099 og 0 bliver til 000. }
Ja ok, selve koden virker men som du selv siger du fejler den såsnart unit_price indeholder . eller ,. Derudover vises fx 100000 som 100,000, og den sidste seperator skal selvfølgelig ik være der.
Jeg kom faktisk til at bruge "." i stedet for ","..
Her er rettelsen:
function kommatal(v) { k = ""; t = ""; a = "" + v; alert(a); if (a.indexOf(".") >-1) { k = a.substring(a.indexOf(".")); a = a.substring(0, a.indexOf(".") -1); alert(k); }
for(i=a.length-1; i >= 0; i--) t += a.substr(i,1);
a = t; t = ""; c = 0; for(i=0; i < a.length + 1; i++) { c++; t += a.substr(i,1); if (c == 3 && i != a.length-1) { t += ","; c = 0; } }
a = t; t = ""; for(i=a.length-1; i >= 0; i--) t += a.substr(i,1);
<script language="javascript"> function kommatal(v) { k = ""; t = ""; a = "" + v; if (a.indexOf(".") >-1) { k = a.substring(a.indexOf(".")); a = a.substring(0, a.indexOf(".")); }
for(i=a.length-1; i >= 0; i--) t += a.substr(i,1);
a = t; t = ""; c = 0; for(i=0; i < a.length + 1; i++) { c++; t += a.substr(i,1); if (c == 3 && i != a.length-1) { t += ","; c = 0; } }
a = t; t = ""; for(i=a.length-1; i >= 0; i--) t += a.substr(i,1);
return t + k; }
function calc2() { var t1 = document.koeb_bud.maengde; var t2 = document.koeb_bud.unit_price; var resultat = 0;
Du skal lige vente på at jjust også lægger et svar.. så kan du markere begge navnet i boksen til venstre (der står kun "thesurfer" lige nu) og derefter klikke på Accepter-knappen..
<script type="text/javascript"> 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(","); } function rem1000Sep(val){ return val.replace(/\./g,""); } </script>
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.