12. juni 2003 - 11:28Der er
9 kommentarer og 1 løsning
talberegning i javascript
Jeg har et databaseudtræk på tal som er af typen currency. et eksempel på tal kunne være 1,25 Javascriptet skal lægge disse tal sammen - problemet er at de afrundes nedad til heltal 1,25 bliver til 1. Hvilken type skal de konverteres til for at undgå dette?
Jeg har set formularer, hvor de henter værdier ind med var tal1 = parseFloat(formular.felt1) var tal2 = parseFloat(formular.felt2) var res=tal1/tal2 formular.res = res
Alle tal kan indtastes som decimaltal, og resultatet kommer ud som decimaltal. Skal vi gætte på, at der så er en variabeltype Float?
Du skal sørge for at det er javascript talformat, altså skal der stå 1.25 ...
Javascript vil typisk behandle en parameter, som den tror den skal behandles og on-the-fly bestemme datatypen, derfor vil dine tal umiddelbart blive fortolket som tekst-strenge, men forsøger du at regne med dem, vil javascript forsøge at komme så langt, som den kan ...
Du bliver derfor nødt til at konvertere til javascript-talformat:
function makeNumber(tal){ if (tal.indexOf(",")>-1){ komma = tal.indexOf(","); return tal.substring(0,komma)+"."+tal.substring(komma+1); } }
kør alle dine tal igennem den maskine før du regner med dem -- bagefter får du oftest brug for at formattere dem til de to decimaler, men start lige med at få den til at regne ordentligt !O)
Men tænk også på at konvertere til læselige tal bagefter '-)
-- javascript er nemlig hård i sin on-the-fly type-konvertering, så den laver det om til heltal, hvis den kan det, og du kan ikke bestemme antal decimaler, den viser i et i talformat ...
Tricket med det er så, at lægge "" til tallet (konvertere til tekst-streng), tælle hvor mange decimaler, der er og så afkorte eller forlænge til to decimaler ;O)
Jeg har fået følgende problem: javascriptet regner simeplthen forkert feks. hvis jeg kalder beregn med: beregn(3000,1.15,"tekstfelt") bliver resultat : 3449.9999999999995 i stedet for 3450!
function beregn(str,str2,str3) { var stkpris = makeNumber(str); var antal = parseFloat(str2); var elementet = str3 + "_s"; var stk_element = str3 + "_stk"; eval("document.form1." + elementet).value = (stkpris * antal); eval("document.form1." + stk_element).value = stkpris; } function makeNumber(tal){ if (tal.indexOf(",")>-1){ komma = tal.indexOf(","); return tal.substring(0,komma)+"."+tal.substring(komma+1); } else return tal; }
Derfor skal du regne med specielt i javscript og andre af de typeløse, at du selv må lave afrunding ...
Hvis du f.eks. gør det samme i excel, vil du ikke sjøldent støde ind i det samme, hvis du kigger på de reelle værdier bagved præsentationen -- der er det bare standard at der laves en formattering inden brugeren ser det ...
Det kommer an på, hvordan du skal bruge det, men jeg går ud fra, at det skal ende i et tekstfelt ...
function afrund(tal){ tal = ""+(Math.round(tal*100))/100; punktum = tal.indexOf("."); if (punktum==-1)return tal+".00"; if (tal.length-punktum==3)return tal; else return tal+"0"; }
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.