Avatar billede ravnborg Nybegynder
29. december 2006 - 21:46 Der er 10 kommentarer og
1 løsning

Hjælp til fejl i script

Jeg har et lille javascript som skal lave nogle små udregninger.

Scriptet får 3 tal at arbejde med. De 2 første skal sættes sammen og til sidst ganges med det 3. tal

eks.
tal1 = 2
tal2 = 7
tal3 = 100

=2700

Tallene kommer ind i scriptet ved at der bliver klikket på nogle radio-knapper i en form.

Scriptet virker fint, lige på nær når der skal ganges med 0,1. Så sætter den nogle gange en frygtelig masse nuller efter tallet

så det ikke giver 1,7 men 1,70000000.

Hvordan undgår jeg dette?

<script language="javascript" type="text/javascript">
function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[+f.elements[i].name] = +f.elements[i].value;
  }
  f.ialt.value = (r[1]+r[2])*r[3];
}
</script>

<input type="radio" name="3" value="0.1" onclick="regnMedRadio(this.form)">
Avatar billede thesurfer Nybegynder
29. december 2006 - 23:13 #1
Der er et eller andet der ikke passer..

I dit eksempel bliver "2", "7", "100" til "2700" via: "27" * "100"..

Dvs, hvis man indtaster "0.1", "0.1", "0.1", så må det blive "0.10.1" * "0.1"

Dvs: "0.1", "7", "100" bliver til "17", da "0.1" og "7" bliver til "0.17", ganget med "100" bliver til 17..

Skal det virke sådan?
Avatar billede thesurfer Nybegynder
29. december 2006 - 23:14 #2
Der vil opstå en matematisk fejl (om man vil), hvis tal1 og tal2 begge er kommatal, da værdien "0.10.1" er ugyldig..
Avatar billede ravnborg Nybegynder
29. december 2006 - 23:18 #3
Tal1 er mellem 1-9, tal2 0-9 og tal3 kan være 0,1 10 100 1000 10000 100000.

Problemet opstår kun når tal3 er o,1 men ikke altid.
Avatar billede mclemens Nybegynder
29. december 2006 - 23:20 #4
f.ialt.value = (r[1]+r[2])*r[3];
->
f.ialt.value = ((r[1]+r[2])*r[3]).toFixed(2);
Avatar billede mclemens Nybegynder
29. december 2006 - 23:21 #5
Eksempel på fejlen:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta

http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title><meta name="robots"

content="index, follow">

<script type="text/javascript">

function regnMedRadio(f){
  var r = new Array();
  for(i=0;f.elements.length>i;i++){
    if(f.elements[i].type=="radio"&&f.elements[i].checked)
      r[+f.elements[i].name] = +f.elements[i].value;
  }



  f.ialt.value = (r[1]+r[2])*r[3];

//f.ialt.value = ((r[1]+r[2])*r[3]).toFixed(2); // fjern // senere foran denne

}

</script>

</head><body>
<form>
<input type="radio" name="1" value="2" onclick="regnMedRadio(this.form)">
<input type="radio" name="1" value="5" onclick="regnMedRadio(this.form)">
<input type="radio" name="1" value="6" onclick="regnMedRadio(this.form)">
<input type="radio" name="1" value="7" onclick="regnMedRadio(this.form)" checked="checked">
<br><br>
<input type="radio" name="2" value="7" onclick="regnMedRadio(this.form)">
<input type="radio" name="2" value="6" onclick="regnMedRadio(this.form)">
<input type="radio" name="2" value="12" onclick="regnMedRadio(this.form)">
<input type="radio" name="2" value="54" onclick="regnMedRadio(this.form)" checked="checked">
<br><br>
<input type="radio" name="3" value="0.1" onclick="regnMedRadio(this.form)">
<input type="radio" name="3" value="0.2" onclick="regnMedRadio(this.form)" checked="checked">
<input type="text" name="ialt" value="">
</form>
</body></html>


... kryds af i første boks og fejlen er der
- byt rundt på // foran de to blokke og det virker
Avatar billede mclemens Nybegynder
29. december 2006 - 23:28 #6
f.ialt.value = ((r[1]+r[2])*r[3]).toFixed(2).replace(".",",");
er nok en tand bedre ...
Avatar billede ravnborg Nybegynder
29. december 2006 - 23:32 #7
Det virker, men nu bliver alle resultaterne vist som kommatal. Kan man ikke fjerne decimalerne hvis det er 00?
Avatar billede mclemens Nybegynder
29. december 2006 - 23:39 #8
tmp=((r[1]+r[2])*r[3]).toFixed(2).split(".");
f.ialt.value = tmp[1]<1?tmp[0]:tmp[0]+","+tmp[1];
Avatar billede mclemens Nybegynder
29. december 2006 - 23:42 #9
Lidt tekst skader aldrig ...

tmp=((r[1]+r[2])*r[3]).toFixed(2).split(".");
- tmp variablen tildeles et opsplittet array som
består af tallet samt decimaler ved udregning

f.ialt.value = tmp[1]<1?tmp[0]:tmp[0]+","+tmp[1];
- ialt tildeles værdien af helttallet alene
hvis tmp[1] er under 1 ( d.v.s. 0 i ørers decimal værdi)
ellers tildeles helttal værdien samt decimal værdien adskilt af komma.
Avatar billede ravnborg Nybegynder
29. december 2006 - 23:47 #10
SUPER. Det virker perfekt.

vh
Ravnborg
Avatar billede mclemens Nybegynder
29. december 2006 - 23:48 #11
Velbekomme, tak for point :)
Godt nytår til dig og Thesurfer.

Ah, hvor har jeg glemt meget js
og savnet at nørde lidt herinde :)
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