17. april 2007 - 19:51
Der er
22 kommentarer og 1 løsning
Decimaltal dur ikke ved udregning
Hej! Jeg har lavet en lille kalorieudregner, som jeg kan bruge til at holde styr på mit kalorieindtag.. Og jeg var mægtig stolt over at jeg kunne lave den i JavaScript, men den glæde holdte kun kort :( . Jeg opdagede nemlig at man ikke kan lave udregninger med decimaltal :( (kodningen er sikkert også noget skrammel, men jeg prøvede da.) Hvordan får jeg scriptet til at kunne regne med decimaltal? function calculate_kcal(){ var proteine, carbonhydrate, fat; var allenergy; var kcal_energy; var kj_energy; var weight; var total_kcal; var total_kj; proteine = parseInt(document.getElementById("proteine").value)*4; carbonhydrate = parseInt(document.getElementById("carbonhydrate").value)*4; fat = parseInt(document.getElementById("fat").value)*9; kcal_energy = proteine+carbonhydrate+fat; kj_energy=kcal_energy*4.18400; document.getElementById("energy_kcal").value = kcal_energy; document.getElementById('energy_kcal').value=Math.round(document.getElementById('energy_kcal').value*100)/100; //afrunder til 2 decimaler. document.getElementById('energy_kj').value=kcal_energy*4.18400; document.getElementById('energy_kj').value=Math.round(document.getElementById('energy_kj').value*100)/100; //afrunder til 2 decimaler. }
Annonceindlæg fra Computerworld
17. april 2007 - 21:47
#1
Du skal huske at erstatte "," med ".".. eller omvendt.. :-) Eksempel: function erstat(vaerdi) { vaerdi = vaerdi.replace(",", "."); return vaerdi; } og så din kode: proteine = parseInt(erstat(document.getElementById("proteine").value))*4; Det kan godt være, at det skal være vaerdi.replace(",", ".") .. men jeg tvivler..
17. april 2007 - 21:48
#2
Rettelse: Det kan godt være, at det skal være vaerdi.replace(".", ",") .. men jeg tvivler.. Dvs, Det kan godt være, at "." skal erstattes med ",".. men jeg tvivler.. :-)
17. april 2007 - 21:55
#3
Hej thesurfer. Jeg kom også i tanke om det samme, så jeg har allerede en replace i koden ved inputfeltet, så det ser sådan ud: onKeyUp="this.value = this.value.replace(',', '.'); calculate_kcal();" Men det virker ikke :(
17. april 2007 - 22:02
#4
Hvilke værdier indtaster du? Virker det med heltal, dvs, uden "," og "." ?
17. april 2007 - 22:03
#5
Ved "Math.round" parser du ikke til int.. Prøv lige at parse der også..
17. april 2007 - 22:17
#6
Jeg indtaster f.eks. for M&M's chokolade (namnam :p): (protein) 5,2 (kulhydrat)71,5 (fedt)17,5 Det skulle så gerne vise 1951 KJ og 464 kcal. Men den udregner ikke, med mindre jeg runder op til nærmeste heltal. Nu har jeg: document.getElementById('energy_kcal').value=parseInt(Math.round(document.getElementById('energy_kcal').value*100))/100; Var det sådan du mente? (der sker nemlig ikke noget, stadig det samme..)
17. april 2007 - 22:21
#7
Nej, jeg mente: Math.round(parseInt(document.getElementById('energy_kcal').value) * 100) Men du skal lige være opmærksom på, at parseInt runder af til heltal.. dvs, ingen kommatal.. Ellers skal du bruge parseFloat(...)..
17. april 2007 - 23:10
#8
ahaa! Det prøvede jeg også lige. Men det ser stadig ikke ud til at virke. Du får lige hele koden: <!------------ udregn.js ------------------> function calculate_kcal(){ var proteine, carbonhydrate, fat; var allenergy; var kcal_energy; var kj_energy; var weight; var total_kcal; var total_kj; proteine = parseInt(erstat(document.getElementById("proteine").value))*4; carbonhydrate = parseInt(erstat(document.getElementById("carbonhydrate").value))*4; fat = parseInt(erstat(document.getElementById("fat").value))*9; kcal_energy = proteine+carbonhydrate+fat; kj_energy=kcal_energy*4.18400; document.getElementById("energy_kcal").value = kcal_energy; document.getElementById('energy_kcal').value=Math.round(parseFloat(document.getElementById('energy_kcal').value) * 100)/100; //afrunder til 2 decimaler. document.getElementById('energy_kj').value=kcal_energy*4.18400; document.getElementById('energy_kj').value=Math.round(parseFloat(document.getElementById('energy_kj').value) * 100)/100; //afrunder til 2 decimaler. } <!------------ index.php ------------------> <input type="text" id="proteine" name="proteine" maxlength="5" onKeyUp="calculate_kcal();"> <input type="text" id="carbonhydrate" name="carbonhydrate" maxlength="5" onKeyUp="calculate_kcal();"> <input type="text" id="fat" name="fat" maxlength="5" onKeyUp="calculate_kcal();"> <input type="text" id="energy_kj" disabled="disabled" name="energy_kj" maxlength="6"> <input type="text" id="energy_kcal" disabled="disabled" name="energy_kcal" maxlength="5">
17. april 2007 - 23:20
#9
Hvis det ikke virker, må du vel få en fejlmeddelse?
17. april 2007 - 23:23
#10
Hvad har du gjort af min "erstat"-funktion? :-) Du kalder den her, men jeg kan ikke se funktionen i indlægget 17/04-2007 23:10:36 : proteine = parseInt(erstat(document.getElementById("proteine").value))*4; carbonhydrate = parseInt(erstat(document.getElementById("carbonhydrate").value))*4; fat = parseInt(erstat(document.getElementById("fat").value))*9;
17. april 2007 - 23:33
#11
ups.. den er der, jeg havde bare ikke fået den med i indlægget :-) Nej der kommer ingen fejlmeddelelse. Problemet er 'blot' at der står 1912 KJ / 457 kcal i stedet for 1951 KJ / 464 kcal (som der står på emballagen).. samme problem med andre produkter. Så det er de decimaler der ikke bliver regnet med :-/
17. april 2007 - 23:33
#12
Jeg har rettet parseInt til parseFloat, alle steder.. og sat erstat-funktionen i .js filen..
17. april 2007 - 23:35
#13
Jeg har brugt værdierne: (protein) 5,2 (kulhydrat)71,5 (fedt)17,5 Og får: 1942.63 KJ 464.3 kcal
17. april 2007 - 23:40
#14
Hm! Det var bare mig der ikke havde tænkt mig om. Jeg havde ikke sat de 3 første parseInt til parseFloat!!! ups.. Men nu virker det. 1000 tak thesurfer. smid et svar.
17. april 2007 - 23:42
#15
btw. Det er vel egentlig ikke den mest 'sobre' kodning?? Man kan vel godt korte hele js -koden ned, kan man ikke?
17. april 2007 - 23:45
#16
Jeg kan ikke se, hvorfor du bruger disse linier 2 gange hver: document.getElementById("energy_kcal").value = kcal_energy; document.getElementById('energy_kcal').value=Math... document.getElementById('energy_kj').value=kcal_energy*4.18400; document.getElementById('energy_kj').value=Math... Men ellers ser det normalt ud.. - Svar.
17. april 2007 - 23:46
#17
En lille rettelse/forbedring til dit script: Math.round(parseFloat(...)) Her aflæser du værdien via document igen.. i stedet for at putte værdien i en variabel..
17. april 2007 - 23:47
#18
Hmm.. måske vrøvler jeg nu.. :-) Må nok hellere kigge nærmere på koden.. :-)
17. april 2007 - 23:50
#19
udregn.js ser nu sådan ud: function calculate_kcal(){ var proteine, carbonhydrate, fat; var allenergy; var kcal_energy; var kj_energy; var weight; var total_kcal; var total_kj; proteine = parseFloat(erstat(document.getElementById("proteine").value))*4; carbonhydrate = parseFloat(erstat(document.getElementById("carbonhydrate").value))*4; fat = parseFloat(erstat(document.getElementById("fat").value))*9; kcal_energy = proteine+carbonhydrate+fat; kj_energy=kcal_energy*4.18400; document.getElementById('energy_kcal').value=Math.round(kcal_energy * 100)/100; //afrunder til 2 decimaler. document.getElementById('energy_kj').value=Math.round(kj_energy * 100)/100; //afrunder til 2 decimaler. } function erstat(vaerdi) { vaerdi = vaerdi.replace(",", "."); return vaerdi; }
17. april 2007 - 23:53
#20
Aha.. Jeg takker og bukker. :)
17. april 2007 - 23:54
#21
Det var så lidt.. takker for points.. :-)
17. april 2007 - 23:56
#22
Så vidt jeg kan se, på den kode du har vist mig, bruger du ikke disse variabler: var allenergy; var weight; var total_kcal; var total_kj; Variablerne eksisterer kun i denne funktion.. Så hvis du ikke tilføjer mere kode til funktionen calculate_kcal, kan du lige så godt fjerne de variabler.. :-)
18. april 2007 - 08:26
#23
Variablerne bliver brugt senere i funktionen. Jeg pastede bare ikke den kode ind, da den virker fint. :)
Vi tilbyder markedets bedste kurser inden for webudvikling