JavaScript - Error en división

   
Vista:

Error en división

Publicado por elias (5 intervenciones) el 11/07/2015 22:35:15
Saludos, tengo el siguiente problema con una función de división en javascript que intento implementar en una plataforma de comercio electrónico conocida, al ejecutar realiza el calculo pero con diferencias en los resultados, desconozco a que puede deberse, aquí el código, agradezco su ayuda:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<script>// <![CDATA[
var a='%total%';
       a=parseInt(a)
function calculate(meth)
{
switch (meth){
case "2 Cuotas":
var c=a/b;
var b='2';
up_Pagos = a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
case "3 Cuotas":
var c=a/b;
var b='3';
up_Pagos = a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
case "4 Cuotas":
var c=a/b;
var b='4';
up_Pagos = a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
case "5 Cuotas":
var c=a/b;
var b='5';
up_Pagos = a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
case "6 Cuotas":
var c=a/b;
var b='6';
up_Pagos = a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
case "7 Cuotas":
var c=a/b;
var b='7';
up_Pagos= a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
case "8 Cuotas":
var c=a/b;
var b='8';
up_Pagos = a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
break;
 
}
document.up_Cuotas.up_Pagos.value=c;
 
}
// ]]></script>
 
 
<div id="amount">%total%</div>
<div class="form-group"><label for="up_Cuotas">Cuotas </label><select id="up_Cuotas" class="form-control" name="up_Cuotas" onchange="calculate(this.value)">
<option value="2 Cuotas">2 Cuotas</option>
<option value="3 Cuotas">3 Cuotas</option>
<option value="4 Cuotas">4 Cuotas</option>
<option value="5 Cuotas">5 Cuotas</option>
<option value="6 Cuotas">6 Cuotas</option>
<option value="7 Cuotas">7 Cuotas</option>
<option value="8 Cuotas">8 Cuotas</option>
</select></div>
<p> </p>
<div><label for="up_Pagos">Monto a Pagar en Cuotas </label> <input id="up_Pagos" name="up_Pagos" type="text" /></div>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Error en división

Publicado por xve (1596 intervenciones) el 12/07/2015 12:29:21
Hola Elias, pero que valor tienes la variable "a"¿? que es: '%total%'?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en división

Publicado por elias (5 intervenciones) el 12/07/2015 23:27:51
Gracias por preguntar es un valor que se obtiene en la plataforma de comercio y representa el total a pagar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

Error en división

Publicado por Vainas (239 intervenciones) el 12/07/2015 18:59:38
Buenas:

1. No deberias hacer un calculo sin haber asignado un valor:

1
2
var c=a/b;
var b='2';


Si vas a calcular la division con el valor de b primero asignale el valor y luego has la division.

2. Si vas a realizar calculos no uses cadenas o strings:

1
var b='2';


es mejor

1
var b = 2.00; // ya que vas a trabajar con float.


3. Esto se puede hacer en una misma linea:

1
2
var a='%total%';
       a=parseInt(a)


es mejor:

1
var a = parseFloat(%total%); //Usamos float mejor que int para realizar los calculos con decimales.


Lo que dice xve, que no sabemos de donde viene total. Imagino que es un valor que se resuelve en el servidor... al cliente le llega un numero. De todas formas intenta no meterlo dentro de comillas para que no pase a ser un string si es que lo que viene es un numero de donde sea.

Te he hecho este ejemplo (mas abajo) que creo que es mas corto que lo que tienes. Repites el realizar un calculo dentro del switch que no es necesario, puedes asignar en el switch los valores que necesites y al final haces el calculo, ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
switch (meth){
case "2 Cuotas":
var b = 2;
break;
 
case "3 Cuotas":
var b = 3;
break;
 
case "4 Cuotas":
var b = 4;
break;
 
...
}
//al final
var c = a/b;
up_Pagos= a/b*1000;
document.getElementById("up_Pagos").value = up_Pagos.toFixed(2);
//...


Mi ejemplo: http://jsfiddle.net/dLcosysm/

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error en división

Publicado por elias (5 intervenciones) el 12/07/2015 22:31:40
Estimado, excelente respuesta, muy completa, sin embargo al aplicarlo en mi sitio no obtengo el resultado esperado, supongo que porque al capturar la variable %total% con ese formato, no esta aplicando el Float...sigo intentando...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en división

Publicado por elias (5 intervenciones) el 12/07/2015 23:44:48
Me percate que el error viene dado porque al capturar la variable %total% esta tiene el siguiente formato $ 6.500,00 (moneda,espacio,numero,punto y resto digitos) como puedo intentar hacer el replace, he probado así:

var a='%total%';
var nueva = a.replace(/$/i, "");
nueva=nueva.replace(/ /g,'&nbsp');
nueva=parseFloat(nueva)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

Error en división

Publicado por Vainas (239 intervenciones) el 13/07/2015 08:29:22
Buenas de nuevo:

Esto es otro tema.. yo creo que con esto tendrias la solucion:

1
2
var a='$ 6.500,23';
nueva = parseFloat(a.replace(/[^0-9-,]/g, '').replace(',','.'));

Entonces si que deberias ponerle las comillas al traer la variable desde donde sea (como lo has hecho en el anterior ejemplo).

De tu codigo no funciona por lo siguiente:

El dolar es una variable que tienes que escapar asi \$. No es necesario que te preocupes por los espacios, lo mas importante es que parseFloat entiende que los decimales comienzan en un punto y no con coma.

Espero que sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar