webForumDet fria alternativet

i utbildningssyfte skulle jag vilja ha koden förklarad

JavaScript

14 svar · 764 visningar · startad av ptr_lks

Medlem sedan juni 2005584 inlägg
Frågan#1
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);
}
Medlem sedan dec. 20025 483 inlägg
#2
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);
}
Medlem sedan juni 2005584 inlägg
#3

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....

Medlem sedan dec. 20025 483 inlägg
#4
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]"...
Medlem sedan juni 2005584 inlägg
#5

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
Medlem sedan dec. 20025 483 inlägg
#6
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;
}
Medlem sedan juni 2005584 inlägg
#7

tack för hjälpen Peter!

Medlem sedan dec. 20025 483 inlägg
#8

Np :bire

Medlem sedan juni 2005584 inlägg
#9

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);
Medlem sedan dec. 20025 483 inlägg
#10

Ta bort det första '('.

Medlem sedan juni 2005584 inlägg
#11

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
Medlem sedan dec. 20025 483 inlägg
#12
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)"
Medlem sedan juni 2005584 inlägg
#13

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...

Medlem sedan dec. 20025 483 inlägg
#14

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);
"
Medlem sedan juni 2005584 inlägg
#15

Peter S skrev:

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

vet inte, skall prova när jag kommer hem

466 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
333 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)