webForumDet fria alternativet

Functions-fråga!

1 svar · 289 visningar · startad av harry_boy

harry_boyMedlem sedan feb. 2003193 inlägg
#1

Jag skäms för att jag bombaderar Er med mitt beställningsformulärsfråga!!

Om jag använder mig av denna beräkning och så summerar den inte rätt om jag använder mig av kommadecimal i stället för punkt. Dvs 2*1,6=2 istället för t.ex 2*1.6=3.2.
Jag fick hjälp i en tidigare tråd att ersätta en punkt till ett komma och detta går bra och jag får då resultatsidan som skickas som mail att bli rätt. Så egentligen så är det att denna function skall addera om jag har komma-decimal så skulle allt bli bra! Går det även att få med 2 decimaler så hade det varit kanonbra!


<script language="javascript" type="text/javascript">
function addera()
{
	var elms = document.forms["form1"].elements;
	if ( !elms )
		return false;

	var momsfaktor = 1.25;
	var momsfaktor2 = 0.25;

	var totsum = 0.0;
	var i = 1;

	var obj = null;

	while ( elms["antal"+i] && elms["pris"+i] )
	{
		var delsum = parseFloat( elms["antal"+i].value, 10 ) * parseFloat( elms["pris"+i].value, 10 );
		if ( isNaN( delsum ) )
			delsum = 0;

		obj = document.getElementById( "delsum"+i );
		if ( obj )
			obj.innerHTML = delsum;
		obj = document.getElementById( "delsum_moms"+i );
		if ( obj )
			obj.innerHTML = delsum * momsfaktor;

		totsum += delsum;
		i++;
	}

	if ( elms["totalpris"] )
		elms["totalpris"].value = totsum;
	if ( elms["totalpris_moms"] )
		elms["totalpris_moms"].value = totsum * momsfaktor;
	if ( elms["moms"] )
		elms["moms"].value = totsum * momsfaktor2;
	obj = document.getElementById( "totsum" );
	if ( obj )
		obj.innerHTML = totsum;
	obj = document.getElementById( "totsum_moms" );
	if ( obj )
		obj.innerHTML = totsum * momsfaktor;
	obj = document.getElementById( "tot_moms" );
	if ( obj )
		obj.innerHTML = totsum * momsfaktor2;

	return true;
}

</script>
Peter SMedlem sedan dec. 20025 483 inlägg
#2

Om decimaltalen i forumläret skrivs med kommatecken får du först omvandla dessa i funktionen, utföra beräkningarna, omvandla tillbaka och därefter skriva till inputrutorna.

Så här kan du göra:

String.prototype.make_decimal = function(){
    var s = this.replace(/,/g, '.');
    if (isNaN(s)) return null;
    return s;
}

function addera(){
    var elms = document.forms["form1"].elements;

    // Deklarera variabler för inputelementen, t ex
    var antal1 = elms["antal1"];
    .
    .
    .
    // Omvandla till punktform och undersök huruvida formatet är giltigt
    var val;
    if ((val = antal1.value.make_decimal()) == null) alert("Ej giltigt format!");
    .
    .
    .
    // Utför beräkningar
    var totsum = [i]x[/i] + [i]y[/i];

    // Skriv tillbaka
    document.getElementById("totsum").innerHTML = (totsum + "").replace(/\./g, ',');
}

:)

127 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)