Foros del Web » Programando para Internet » Javascript »

Cálculo matemático

Estas en el tema de Cálculo matemático en el foro de Javascript en Foros del Web. Ando algo desesperado, llevo varios días intentando que funcione una formula en javascript y no consigo dar con la forma de hacer que funcione. He ...
  #1 (permalink)  
Antiguo 25/10/2010, 09:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Cálculo matemático

Ando algo desesperado, llevo varios días intentando que funcione una formula en javascript y no consigo dar con la forma de hacer que funcione. He mirado decenas de tutoriales y he probado otros tantos scripts y nada.

Lo que quiero es que los usuarios pongan en campos de texto 5 números, A B C D y E. Y la operación que debería hacer el código es la siguiente:

((A-B)/7) - ((C+D)/5)

y el resultado de esto multiplicarlo por E.

Gracias anticipadas.
  #2 (permalink)  
Antiguo 25/10/2010, 10:07
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: Cálculo matemático

Que has intentado??...podrias mostrar algo de tu codigo x fas??
  #3 (permalink)  
Antiguo 25/10/2010, 11:24
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Cálculo matemático

prueba esto, por último chequeando podras corregir tu error

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>C&aacute;lculo</title>
<script>
function calc(){
	var a=document.getElementById("num1")
	var b=document.getElementById("num2")
	var c=document.getElementById("num3")
	var d=document.getElementById("num4")
	var e=document.getElementById("num5")
	ereg=/\d$/ //sólo numeros
	
	if(!a.value.match(ereg)) {alert("sólo numeros en a\"A\"");a.focus();return false}
	if(!b.value.match(ereg)) {alert("sólo numeros en a\"B\"");b.focus();return false}
	if(!c.value.match(ereg)) {alert("sólo numeros en a\"C\"");c.focus();return false}
	if(!d.value.match(ereg)) {alert("sólo numeros en a\"D\"");d.focus();return false}
	if(!e.value.match(ereg)) {alert("sólo numeros en a\"E\"");e.focus();return false}
	
	formula1=a.value-b.value
	formula1=formula1/7
	formula2=c.value*1+d.value*1
	formula2=formula2/5
	var ress=(formula1-formula2)*e.value
	
	document.getElementById("res").innerHTML=ress
}
</script>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <p>N&uacute;mero A: 
    <input type="text" name="num1" id="num1" maxlength="4" size="10" />
    <br />
    N&uacute;mero B:
  <input type="text" name="num2" id="num2" maxlength="4" size="10" />
  <br />
    N&uacute;mero C:
  <input type="text" name="num3" id="num3" maxlength="4" size="10" />
  <br />
    N&uacute;mero D:
  <input type="text" name="num4" id="num4" maxlength="4" size="10" />
  <br />
    N&uacute;mero E:
  <input type="text" name="num5" id="num5" maxlength="4" size="10" />
  </p>
  <p>
    <input type="button" name="c" id="c" value="Calcular" onclick="calc()" />
  </p>
</form>

<div style="background-color:#FFFF80; margin-top:20px; width:300px; padding:10px">F&oacute;rmula: ((A-B)/7) - ((C+D)/5) * E<br />
  Resultado: <span id="res" style="font-weight:bold">?</span>
</div>
</body>
</html> 
salu2
  #4 (permalink)  
Antiguo 25/10/2010, 11:36
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cálculo matemático

Pues muchísimas gracias, es perfecto y todo lo que necesito.
  #5 (permalink)  
Antiguo 25/10/2010, 11:52
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cálculo matemático

Una última cosa. Estoy intentando que el resultado sea siempre un numero entero y para ello he cambiado la linea

document.getElementById("res").innerHTML=ress

a

document.getElementById("res").innerHTML=parseint( ress)

El problema es que siempre redondea hacia abajo, y yo quiero que si el número es mayor de X,5 redondee hacia arriba, y si es menor hacia abajo, ¿hay alguna forma?
  #6 (permalink)  
Antiguo 25/10/2010, 11:57
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Cálculo matemático

Sólo unas cositas:
Cita:
Iniciado por Perr0
<!-- ... -->
<script>
function calc(){
var a=document.getElementById("num1")
var b=document.getElementById("num2")
var c=document.getElementById("num3")
var d=document.getElementById("num4")
var e=document.getElementById("num5")
ereg=/\d$/ //sólo numeros

if(!a.value.match(ereg)) {alert("sólo numeros en a\"A\"");a.focus();return false}
if(!b.value.match(ereg)) {alert("sólo numeros en a\"B\"");b.focus();return false}
if(!c.value.match(ereg)) {alert("sólo numeros en a\"C\"");c.focus();return false}
if(!d.value.match(ereg)) {alert("sólo numeros en a\"D\"");d.focus();return false}
if(!e.value.match(ereg)) {alert("sólo numeros en a\"E\"");e.focus();return false}

formula1=a.value-b.value
formula1=formula1/7
formula2=c.value*1+d.value*1
formula2=formula2/5
var ress=(formula1-formula2)*e.value

document.getElementById("res").innerHTML=ress
}
</script>
<!-- ... -->
El código es bastante correcto, pero si no te importa te comento algunas líneas (las que están en rojo):
#1: Eso es un poco cierto, pero no del todo. Lo que le estás pidiendo es que al final de la cadena haya un número, por tanto hola1 pasaría. La solución es /^\d+$/. También existen otras funciones nativas para comprobar si son números o no, isNaN() e isFinite().
#2: La función match() sirve para crear un array con las coincidencias que haya de un patrón en una cadena. Por tanto, cuando lo usas en el if(), funciona si hay coincidencias porque al no estar vacío el array pasa, pero es más "correcto" usar test(), que devuelve un booleano.
#3: Así también funciona, pero es más fácil poner alert('sólo numeros en "B"'), ¿no?
#4: Cuando vas a sumar, restar, multiplicar o dividir una variable por ella misma, se puede poner como variable = variable + 2, pero, al menos para mí es más cómodo usar +=. Hay gente a la que le gusta más usar la primera forma porque es más clásica, pero te lo comento por si no lo sabías.
#5: 1*1=1, 2*1=2, 3*1=3,... n*1=n. Es inútil multiplicar un número por 1, basta con que sumes uno y otro.
#6: Como en #4 (/=).
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 25/10/2010, 12:16
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Cálculo matemático

gracias por las aclaraciones _cronos2

lo del test me gusto, no ocupo mucho estas funciones pero me has ayudado a simplificar mi trabajo.

estoy de acuerdo en todos los puntos excepto uno

formula2=c.value*1+d.value*1

como esto lo hice en un tiempo corto y apurado (porque ademas estoy trabajando) no me acordaba y todabia no me acuerdo como convertir string en numeros, como ejemplo

c.value=3
d.value=4

para formula2=c.value+d.value (sin los *1)

formula2=34


formula2=c.value*1+d.value*1 (con los *1)

formula2=7


solo eso, si te acuerdas te pido lo mencionesy no se me olvidará mas

saludos
  #8 (permalink)  
Antiguo 25/10/2010, 12:31
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Cálculo matemático

Ok, esque no me había dado cuenta que no lo habías pasado a número, tienes toda la razón. Para pasar de string a número puedes usar parseInt(), que convierte el número en un entero, o parseFloat(), que lo convierte en racional.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 25/10/2010, 13:58
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Cálculo matemático

Cita:
Iniciado por _cronos2 Ver Mensaje
Ok, esque no me había dado cuenta que no lo habías pasado a número, tienes toda la razón. Para pasar de string a número puedes usar parseInt(), que convierte el número en un entero, o parseFloat(), que lo convierte en racional.
Saludos (:
verdad, que simple, lo habia hecho antes pero no me acordaba y me dió lata buscar en google, me mareo con los lenguaje, para que veas estaba buscando un int()...
se agradece nuevamente

Etiquetas: Ninguno
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 21:32.