Foros del Web » Programando para Internet » Javascript »

Problema en código tienda electrónica

Estas en el tema de Problema en código tienda electrónica en el foro de Javascript en Foros del Web. Sé muy poco de javascript, pero estoy metiéndome poquito a poco, y he encontrado una función para experimentar con una tienda virtual que me ha ...
  #1 (permalink)  
Antiguo 20/05/2011, 10:35
 
Fecha de Ingreso: mayo-2011
Mensajes: 1
Antigüedad: 13 años
Puntos: 0
Sonrisa Problema en código tienda electrónica

Sé muy poco de javascript, pero estoy metiéndome poquito a poco, y he encontrado una función para experimentar con una tienda virtual que me ha gustado bastante. Todo iba bien hasta que descubrí que "se monta líos" con los decimales, el problema es que al multiplicar el precio por la cantidad de productos cuando hay decimales, se complica la cosa.

He intentando arreglarlo de varias maneras leyendo en diferentes sitios, pero como no tengo mucha idea no doy con el arreglo. A ver si alguien me puede ayudar, porque supongo que debe ser sencillo PERO YO NO LO SÉ VER.

El código es muy sencillo, es este:


<html>
<head>
<title> </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="JavaScript"><!--



item1_price=1.99;
item2_price=2.50;



function inc_item1()
{form1.item1.value=form1.item1.value-(-item1_price);
form1.item1_i.value=form1.item1.value/item1_price;
total_i(); total_a(); }

function inc_item2()
{form1.item2.value=form1.item2.value-(-item2_price);
form1.item2_i.value=form1.item2.value/item2_price;
total_i(); total_a(); }


function total_i()
{form1.total_items.value=-(-form1.item1_i.value)-(-form1.item2_i.value)
; }

function total_a()
{form1.total_amount.value=-(-form1.item1.value)-(-form1.item2.value)
; }

//--></script>

</head>
<body link="#0000ff" vlink="#0000ff" alink="#0000ff">
<form name="form1" action="" method="">
Items <br>
<input type="text1" name="item1_i" size=2 maxlength=3 value="">
&nbsp;&nbsp;&nbsp; $ <input type="text" name="item1" size=10>
<input type="button" value="Order" onClick="inc_item1()">

<input type="hidden" value="aa" name="itemname">
<input type="hidden" value="1.99" name="itemprice">
aa @ US $ 1.99<br><br>





<input type="text" name="item2_i" size=2 maxlength=3>
&nbsp;&nbsp;&nbsp; $ <input type="text" name="item2" size=10>
<input type="button" value="Order" onClick="inc_item2()">
<input type="hidden" value="ee" name="itemname">
<input type="hidden" value="2.50" name="itemprice">
ee @ US $ 2.50<br><br>



Total items ordered: <br><input type="text" name="total_items"><br>
Total amount: <br><input type="text" name="total_amount"><br><br>

<input type="submit" value="Submit Order">
<input type="reset" value="Reset Orders">


</form>



</div>
</div>
</body>
</html>


Si lo veis en el navegador, podréis comprobar que por ejemplo el primer resultado de 1.99, se vuelve loco a partir de multiplicarlo por 11, o lo que sería lo mismo, la compra de 11 artículos del item1.
Sé que el problema está en los decimales y he estado probando con varias funciones:


Number.prototype.decimal = function (num) {
pot = Math.pow(10,num);
return parseInt(this * pot) / pot;
}
function decimal1() {
n=eval(document.getElementById(src).value="");
alert(n.decimal(0)); //deja 3 decimales
}

También con:

var num1 = new Number(3.141592);
var num2 = num1.toFixed(); // 3
var num3 = num1.toFixed(2); // 3.14
var num4 = num1.toFixed(10); // 3.1415920000


Pero algo debo hacer mal porque no me funciona nada. De lo que se trata es que la Cantidad de artículos se mantenga siempre en enteros, y que el importe tenga sólo dos decimales.
Si alguien me puede ayudar, lo agradecería muchísimo, porque otras veces he conseguido sacarme yo sola las castañas del fuego, pero confieso que en esta ocasión estoy absolutamente perdida.

Gracias de antemano.

Etiquetas: decimalesjava, tiendavirtual, tiendas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:39.