---
title: "i utbildningssyfte skulle jag vilja ha koden förklarad"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/135832-i-utbildningssyfte-skulle-jag-vilja-ha-koden-förklarad"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "ptr_lks"
published: "2005-10-16T13:15:24.000Z"
updated: "2005-10-17T11:57:57.000Z"
replies: 14
views: 769
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/135832-i-utbildningssyfte-skulle-jag-vilja-ha-koden-förklarad"
---

# i utbildningssyfte skulle jag vilja ha koden förklarad

## #1 — ptr_lks, 2005-10-16T13:15Z

```
function d_places(n,p) {
	var factor = 1;
	var ans  = 0;
	var j = 0;
	for (j = 1; j <= p; j++)
		factor =  factor * 10.0;
	ans = (Math.round((n + 0.05 / (factor) ) * factor)) / factor;
	return ans;
}

function calc() {
	rexp = /\,/gi;
	newstr=".";
       document.f1.points.value = d_places(
            		(document.f1.weight.value.replace(rexp, newstr)/100)*
            		(document.f1.cals.value.replace(rexp, newstr)/60 + 
            		 document.f1.fat.value.replace(rexp, newstr)/9),1);
}
```

Permalänk: https://www.webforum.nu/p/135832

## #2 — Peter S, 2005-10-16T17:03Z

```
function d_places(n,p) {
	var factor = 1;
	var ans  = 0;
	var j = 0;

	// I for-loopen nedan multipliceras factor med 10 p gånger,
	// vilket är samma sak som 10^p, vilket kan skrivas som Math.pow(10, p)
	for (j = 1; j <= p; j++)
		factor =  factor * 10.0;

	// Nedan adderas n till kvoten av 0.05 och factor. Summan multipliceras
	// därefter med factor och avrundas till närmast hela tal. Det talet
	// divideras sedan med factor och returneras.
	//
	// Uträkningen kan förenklas till:
	// ans = Math.round(factor * n) / factor
	//

	ans = Math.round((n + 0.05 / factor ) * factor) / factor;
	return ans;
}

function calc() {
	// RegExp:et nedan matchar alla kommatecken (',').
	// Man kan fråga sig varför i-flaggan är satt, eftersom syftet med den är att inte 
	// göra skillnad på gemener och versaler
	rexp = /\,/gi;

	// Tecknet som skall ersätta alla kommatecken
	newstr=".";

	// Nedan beräknas ett värde baserat på vikt, kalorier, och fetthalt.
	// Resultatet avrundas till 1 decimal med funktionen ovan.
	//
	// Det reguljära uttrycket omvandlar värden av typen 97,65, till 97.65
	document.f1.points.value = d_places(
            		(document.f1.weight.value.replace(rexp, newstr)/100)*
            		(document.f1.cals.value.replace(rexp, newstr)/60 + 
            		 document.f1.fat.value.replace(rexp, newstr)/9),1);
}
```

Permalänk: https://www.webforum.nu/p/1688347

## #3 — ptr_lks, 2005-10-16T18:24Z

Beräkna antalet vv points

Hej har efter mycket letande hittat en formel som ur energi och fettinnehållet ger antalet viktväktar ponts

> points=kcal/60 + fett/9

.
Har försökt konstruera en sida

```
<title>Ber&auml;kna vv-points</title>
<script language="javascript">
<!-- 

function iPoints(){
	var f = document.vvp;{
	
       f.points.value =(
            		(f.volym.value/100)*
            		(f.kcal.value/60 + 
            		 f.fett.value/9);
}
//->
</script>

</head>

<body>
<form id="form1" name="vvp" method="post" action="">
  <table width="394" border="0">
    <tr>
      <td width="145">Konsumerad&nbsp;M&auml;ngd</td>
      <td width="239"><input name="volym" type="text" id="volym" value="100" maxlength="3" />        &nbsp;&nbsp;&nbsp;gram</td>
    </tr>
    <tr>
      <td>Energi</td>
      <td><input name=kcal type=textbox id="kcal" tabindex=18 size=6 maxlength=4>    
      kcal/100g</td>
    </tr>
    <tr>
      <td>Fett</td>
      <td><input name=fett type=textbox id="fett" tabindex=19 size=6 maxlength=4 />      
      gram/100g</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="knp" type="submit" id="knp" onClick="iPoints( );" value="ge points" /></td>
    </tr>
    <tr>
      <td>Summa points </td>
      <td><input readonly="readonly" type="textbox" maxlength="4" size="6" 
  name="points" /></td>
    </tr>
  </table>
</form>
</body>
</html>
```

Men det som  händer när jag trycker på knappen är att fälten för energi och fett nollställs....

Permalänk: https://www.webforum.nu/p/1688393

## #4 — Peter S, 2005-10-16T18:28Z

```
function iPoints(){
	var f = document.vvp;{  [b]<--- Ta bort '{'[/b]
	
       f.points.value =(  [b]<--- Ta bort '('[/b]
            		(f.volym.value/100)*
            		(f.kcal.value/60 + 
            		 f.fett.value/9);
}

<input name="knp" type="[b]button[/b]"...
```

Permalänk: https://www.webforum.nu/p/1688396

## #5 — ptr_lks, 2005-10-16T18:52Z

> **Peter S skrev:**
>
> ```
> function iPoints(){
> 	var f = document.vvp;{  [b]<--- Ta bort '{'[/b]
> 	
>        f.points.value =(  [b]<--- Ta bort '('[/b]
>             		(f.volym.value/100)*
>             		(f.kcal.value/60 + 
>             		 f.fett.value/9);
> }
> 
> <input name="knp" type="[b]button[/b]"...
> ```

Tack för det... det löst det problemet... Men kan jag avrunda decimaler på följande sätt:

- \< 0,2 avrundas ner till närmaste heltal
- decimaler mellan 0,2 och 0,7 avrundas till 0,5
- \> 0,7 avrundas uppåt till närmaste heltal

Permalänk: https://www.webforum.nu/p/1688401

## #6 — Peter S, 2005-10-16T19:13Z

```
function iPoints(){
	var f = document.vvp;
	
       var val =
            		(f.volym.value/100)*
            		(f.kcal.value/60 + 
            		 f.fett.value/9);

	var fl = Math.floor(val);

	if (val < fl + 0.2){
		val = fl;
	} else if (val >= fl + 0.2 && val <= fl + 0.7){
		val = fl + 0.5;
	} else if (val > fl + 0.7){
		val = Math.ceil(val);
	}

	f.points.value = val;
}
```

Permalänk: https://www.webforum.nu/p/1688407

## #7 — ptr_lks, 2005-10-16T19:18Z

tack för hjälpen Peter!

Permalänk: https://www.webforum.nu/p/1688416

## #8 — Peter S, 2005-10-16T19:21Z

Np  :bire

Permalänk: https://www.webforum.nu/p/1688418

## #9 — ptr_lks, 2005-10-17T07:34Z

jag skall "omvandla" .html -\> mobipocket och då kan jag ej använda mig av variabler, funktioner och villkor :( 
Är detta 

```
rätt:[CODE]onclick="document.vvp.points.value =(
            		(document.vvp.volym.value/100)*
            		(document.vvp.kcal.value/60 + 
            		 document.vvp.fett.value/9);
```

Permalänk: https://www.webforum.nu/p/1688521

## #10 — Peter S, 2005-10-17T08:11Z

Ta bort det första '('.

Permalänk: https://www.webforum.nu/p/1688531

## #11 — ptr_lks, 2005-10-17T10:44Z

kan man göra en enkel replace (byta , till .) som funkar i mobipocket?
Dvs kan varken använda mig av arrays, funktioner, variabler, eller vilkor..
replacen vill jag skall ske i:

```
document.vvp.volym
document.vvp.kcal
document.vvp.fett
```

Permalänk: https://www.webforum.nu/p/1688559

## #12 — Peter S, 2005-10-17T11:00Z

```
onclick="(function(f){
  f.points.value =
    (r(f.volym.value)/100)*
    (r(f.kcal.value)/60 + 
    r(f.fett.value)/9);
  function r(s){ return s.replace(/,/g, '.') }
})(this.form)"
```

Permalänk: https://www.webforum.nu/p/1688562

## #13 — ptr_lks, 2005-10-17T11:02Z

> **Peter S skrev:**
>
> ```
> onclick="(function(f){
>   f.points.value =
>     (r(f.volym.value)/100)*
>     (r(f.kcal.value)/60 + 
>     r(f.fett.value)/9);
>   function r(s){ return s.replace(/,/g, '.') }
> })(this.form)"
> ```

fast nu kan man ju inte använda sig av funktioner i mobipocket...

Permalänk: https://www.webforum.nu/p/1688564

## #14 — Peter S, 2005-10-17T11:13Z

Går det inte att använda anonyma funktioner i attribut heller?

```
onclick="
  document.vvp.points.value =
    (document.vvp.volym.value.replace(/,/g,'.')/100)*
    (document.vvp.kcal.value.replace(/,/g,'.')/60 + 
    document.vvp.fett.value.replace(/,/g,'.')/9);
"
```

Permalänk: https://www.webforum.nu/p/1688566

## #15 — ptr_lks, 2005-10-17T11:57Z

> **Peter S skrev:**
>
> Går det inte att använda anonyma funktioner i attribut heller

vet inte, skall prova när jag kommer hem

Permalänk: https://www.webforum.nu/p/1688573

---

Tråden på webben: https://www.webforum.nu/amne/javascript/135832-i-utbildningssyfte-skulle-jag-vilja-ha-koden-förklarad
