Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Formula de Excel a JS

Estas en el tema de Formula de Excel a JS en el foro de Javascript en Foros del Web. Estimados, Estoy intentando armar un JS que tome valores de 4 inputs, tengo el ejemplo en un Excel, si quieren los puedo compartir por ahí, ...
  #1 (permalink)  
Antiguo 03/11/2019, 16:38
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 18
Antigüedad: 10 años, 1 mes
Puntos: 0
Pregunta Formula de Excel a JS

Estimados,

Estoy intentando armar un JS que tome valores de 4 inputs, tengo el ejemplo en un Excel, si quieren los puedo compartir por ahí, les adjunto las capturas con el detalle de las celdas (D6 y E6) que hacen al cálculo a ver si me pueden dar una mano.

https://www.dropbox.com/s/8p565bp0bczmn10/d6.jpg?dl=0
https://www.dropbox.com/s/qdgv3r30tx51m25/e6.jpg?dl=0

Cualquier ayuda me sirve, saludos!
  #2 (permalink)  
Antiguo 03/11/2019, 19:38
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Formula de Excel a JS

Muy bonitas formulas pero realmente no nos ayuda en nada, si preguntas en el foro de javascript debes publicar tu código javascript, todo el código que tengas y suficiente para reproducir el problema

También explica tu problema lo mas detallado que puedas.
  #3 (permalink)  
Antiguo 04/11/2019, 06:43
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 18
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Formula de Excel a JS

Es que precisamente no se por donde comenzar, para transcribir esta fórmula:

Código:
=1-SI(D2>0,SI(D4>0,E6/(D4+D2),(D1*0.6+D3*0.4)/(D1+D3)),(D1*0.6+D3*0.4)/(D1+D3))
En JS, empecé por algo así...

Código:
	var d1 = 5000
	var d2 = 5000
	var d3 = 5000
	var d4 = 3000
	var e6 = d1 / d1 * d1 * 0.3 + d1 * 0.7 * 0.15 + (d4/d3) *  d3 * 0.5 + d3 * 0.5 * 0.3;

	var result;

	// armado de fórmula
	if (d2 > 0) {
	  if (d4 > 0) {
	  	e6 / (d4 + d2)
	  }
	}

	var s = Math.round(result * 100);

	console.log(s+"%");
	console.log(e6);
  #4 (permalink)  
Antiguo 04/11/2019, 07:20
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formula de Excel a JS

Si no me equivoco es así:

Código Javascript:
Ver original
  1. var D1 = 5000;
  2. var D2 = 5000;
  3. var D3 = 5000;
  4. var D4 = 3000;
  5. var E6 = D1 / D1 * D1 * 0.3 + D1 * 0.7 * 0.15 + (D4/D3) *  D3 * 0.5 + D3 * 0.5 * 0.3;
  6.  
  7. var result;
  8.  
  9. if(D2 > 0){
  10.     if(D4>0){
  11.         result = E6/(D4+D2)
  12.     }else{
  13.         result = (D1*0.6+D3*0.4)/(D1+D3)
  14.     }
  15. }else{
  16.     result = (D1*0.6+D3*0.4)/(D1+D3)
  17. }
  18.  
  19. result = 1 - result;
  20.  
  21. var s = Math.round(result * 100);
  22.  
  23. console.log(s + "%");

Teniendo en cuenta como funciona la función SI de Excel:

Código:
SI(condicion, valor_si_verdadero, valor_si_falso)
El resto es parsear los inputs con parseInt o parseFloat (en caso de que sean decimales) y asignar los valores a las variables.
  #5 (permalink)  
Antiguo 04/11/2019, 07:31
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 18
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Formula de Excel a JS

¡Que genio! Si, es funciona perfectamente, muchas gracias! Ahora entiendo como funciona, me salvaste!
  #6 (permalink)  
Antiguo 04/11/2019, 07:49
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 18
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Formula de Excel a JS

Hago una consulta más porque cuando pongo las operaciones dentro de una función el resultado cambia y deja de ser correcto, estoy haciendo algo mal?:

Código HTML:
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<label for="D1">Monthly online conversations with customers</label>
	<input type="number" name="D1" id="D1"></br>
	<label for="D2">Montly cost of online support</label>
	<input type="number" name="D2" id="D2"></br>
	<label for="D3">Monthly phone conversations with customers</label>
	<input type="number" name="D3" id="D3"></br>
	<label for="D4">Montly cost of phone support</label>
	<input type="number" name="D4" id="D4"></br>
	<label for="result">Result</label>
	<input type="text" name="result" id="result">
	<button onclick="calculate();">Calculate</button>
</body>
<script type="text/javascript">

	function calculate (){
		var D1 = document.getElementById('D1').value;
		var D2 = document.getElementById('D2').value;
		var D3 = document.getElementById('D3').value;
		var D4 = document.getElementById('D4').value;
		var E6 = D1 / D1 * D1 * 0.3 + D1 * 0.7 * 0.15 + (D4/D3) *  D3 * 0.5 + D3 * 0.5 * 0.3;
		 
		var result;
		 
		if(D2 > 0){
		    if(D4>0){
		        result = E6/(D4+D2)
		    }else{
		        result = (D1*0.6+D3*0.4)/(D1+D3)
		    }
		}else{
		    result = (D1*0.6+D3*0.4)/(D1+D3)
		}
		 
		result = 1 - result;
		 
		var s = Math.round(result * 100);
		document.getElementById('result').value = s+"%";
		 
		console.log(s + "%");
	};
</script> 
  #7 (permalink)  
Antiguo 04/11/2019, 07:57
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: Formula de Excel a JS

Cita:
Iniciado por katanaweb Ver Mensaje
Hago una consulta más porque cuando pongo las operaciones dentro de una función el resultado cambia y deja de ser correcto, estoy haciendo algo mal?:

Código HTML:
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<label for="D1">Monthly online conversations with customers</label>
	<input type="number" name="D1" id="D1"></br>
	<label for="D2">Montly cost of online support</label>
	<input type="number" name="D2" id="D2"></br>
	<label for="D3">Monthly phone conversations with customers</label>
	<input type="number" name="D3" id="D3"></br>
	<label for="D4">Montly cost of phone support</label>
	<input type="number" name="D4" id="D4"></br>
	<label for="result">Result</label>
	<input type="text" name="result" id="result">
	<button onclick="calculate();">Calculate</button>
</body>
<script type="text/javascript">

	function calculate (){
		var D1 = document.getElementById('D1').value;
		var D2 = document.getElementById('D2').value;
		var D3 = document.getElementById('D3').value;
		var D4 = document.getElementById('D4').value;
		var E6 = D1 / D1 * D1 * 0.3 + D1 * 0.7 * 0.15 + (D4/D3) *  D3 * 0.5 + D3 * 0.5 * 0.3;
		 
		var result;
		 
		if(D2 > 0){
		    if(D4>0){
		        result = E6/(D4+D2)
		    }else{
		        result = (D1*0.6+D3*0.4)/(D1+D3)
		    }
		}else{
		    result = (D1*0.6+D3*0.4)/(D1+D3)
		}
		 
		result = 1 - result;
		 
		var s = Math.round(result * 100);
		document.getElementById('result').value = s+"%";
		 
		console.log(s + "%");
	};
</script> 
te olvidaste de los benditos parentesis, aunque no lo creas suelen ver lenguajes de programacion que interpretan, de diferente manera las operaciones matematicas, por ello es necesario SIEMPRE agruparlos, en el orden que iran

no es lo mismo

1+1*2+1
que
1+(1*2)+1

son resultados distintos, usa siempre parentesis cuando se trate de Numeros, ejejej por estos errores, es que se matan a veces en paises.
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #8 (permalink)  
Antiguo 04/11/2019, 08:17
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Formula de Excel a JS

@tuadmin, en este caso no es por los paréntesis, ya que sí que le funcionó antes.

El problema es que no está parseando los inputs como números. Para ello, simplemente usa la función parseInt:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <title></title>
  3. </head>
  4.     <label for="D1">Monthly online conversations with customers</label>
  5.     <input type="number" name="D1" id="D1"></br>
  6.     <label for="D2">Montly cost of online support</label>
  7.     <input type="number" name="D2" id="D2"></br>
  8.     <label for="D3">Monthly phone conversations with customers</label>
  9.     <input type="number" name="D3" id="D3"></br>
  10.     <label for="D4">Montly cost of phone support</label>
  11.     <input type="number" name="D4" id="D4"></br>
  12.     <label for="result">Result</label>
  13.     <input type="text" name="result" id="result">
  14.     <button onclick="calculate();">Calculate</button>
  15. </body>
  16. <script type="text/javascript">
  17.  
  18.     function calculate (){
  19.         var D1 = parseInt(document.getElementById('D1').value);
  20.         var D2 = parseInt(document.getElementById('D2').value);
  21.         var D3 = parseInt(document.getElementById('D3').value);
  22.         var D4 = parseInt(document.getElementById('D4').value);
  23.         var E6 = D1 / D1 * D1 * 0.3 + D1 * 0.7 * 0.15 + (D4/D3) *  D3 * 0.5 + D3 * 0.5 * 0.3;
  24.          
  25.         var result;
  26.          
  27.         if(D2 > 0){
  28.             if(D4>0){
  29.                 result = E6/(D4+D2)
  30.             }else{
  31.                 result = (D1*0.6+D3*0.4)/(D1+D3)
  32.             }
  33.         }else{
  34.             result = (D1*0.6+D3*0.4)/(D1+D3)
  35.         }
  36.          
  37.         result = 1 - result;
  38.          
  39.         var s = Math.round(result * 100);
  40.         document.getElementById('result').value = s+"%";
  41.          
  42.         console.log(s + "%");
  43.     };

Ahora sí arroja el mismo resultado que antes.

Te recuerdo que si quieres usar números decimales en vez de enteros deberás cambiar parseInt por parseFloat.

Un saludo
  #9 (permalink)  
Antiguo 04/11/2019, 08:39
Avatar de katanaweb  
Fecha de Ingreso: marzo-2014
Ubicación: Argentina
Mensajes: 18
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Formula de Excel a JS

Ahora si, muchas gracias! Si le estaba dando vueltas a los parentesis y no lo lograba. Muchas gracias! Ya lo tengo funcionando!

Etiquetas: excel, formula, js
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 23:59.