Foros del Web » Programando para Internet » Javascript »

Necesito dar formato a unos números.

Estas en el tema de Necesito dar formato a unos números. en el foro de Javascript en Foros del Web. Hola a tod@s!! Después de conseguir que funcione la calculadora que posteaba anteriormente, ahora el problema está en el formato de los números. He probado ...
  #1 (permalink)  
Antiguo 27/07/2006, 17:01
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Necesito dar formato a unos números.

Hola a tod@s!!

Después de conseguir que funcione la calculadora que posteaba anteriormente, ahora el problema está en el formato de los números.

He probado con todos los post que he encontrado por aquí y en Google pero no hay forma, no me da el formato.

El formato debe ser 1.000,00 ó 10.000,00

El tema principal es que necesito darle el formato sin tener en cuenta que es un campo de formulario, ya que el número se escribe en el campo si pulsar teclas, ni mover el ratón ni nada, o sea, directamente desde el script de la calculadora, por eso y por mi falta de conocimientos en JS es por lo que no consigo hacer que funcione...

Agradecería mucho que alguien me echara una mano...

Última edición por rbczgz; 27/07/2006 a las 18:23
  #2 (permalink)  
Antiguo 28/07/2006, 08:35
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Hola de nuevo!!

¿No hay nadie por ahí que me eche una mano?
  #3 (permalink)  
Antiguo 29/07/2006, 06:35
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Buenas rbczgz

a ver si te sirve esto;

lo que está en negritas es lo que debes agregar y lo que está en rojo es lo que debes substituir

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Calculadora</title> 
</head> 

<body onmouseout="window.status=' '" onmouseover="window.status=' ';return true"> 
<script language="JavaScript"> 
function calcula() { 
var frm = document.calc; 
var val1 = frm.val1.value; 
var val2 = frm.val2.value; 
var val3 =  val2*val2; 
var result1 =  val2*val2; 
if ((frm.val1.value>0 && frm.val1.value<99999) && (frm.val2.value>0 && frm.val2.value<99999)) { 
var res = (val1*14.10)+(val2*7.05)+(result1*9.40); 
resultado = parseFloat(res).toFixed(2).toString();
resultado = resultado.split(".");
var cadena = ""; cont = 1
for(m=resultado[0].length-1; m>=0; m--){
	cadena = resultado[0].charAt(m) + cadena
	cont%3 == 0 && m >0 ? cadena = "." + cadena : cadena = cadena
	cont== 3 ? cont = 1 :cont++
}
frm.result.value = cadena + "," + resultado[1]; 
} else { 
frm.res.value = 0; 
alert ("Debes indicar valores númericos en los campos indicados."); 
} 
} 
function suma() { 
var frm = document.calc; 
var val1 = frm.val1.value; 
var val2 = frm.val2.value; 
frm.result1.value = val2*val2; 
} 
</script> 


<center> 
<div align="center"> 
<table width="300" border="0" cellspacing="0" cellpadding="10"> 
<form name="calc"> 
<tr> 
<td valign=top class="centro grande">Calculadora</td> 
</tr> 
<tr> 
<td> 
Valor 1 
            <input name="val1" type="text" value="5" size="3" maxlenght="5"> 
</td> 
</tr> 
<tr> 
<td> 
Valor 2 
            <input name="val2" type="text" onchange="javascript:suma();" value="100" size="3" maxlenght="6"> 
</td> 
</tr> 
<tr> 
<td> 
Resultado 1 <input type="text" name="result1" size="3" maxlenght="6" value="" readonly> 
</td> 
</tr> 
<tr> 
<td align="center"> 
<input type="button" class="button" value="Calcular" onclick="calcula();"> 
</td> 
</tr> 
<tr> 
<td> 
Totales <input type="text" name="result" size="11" maxlength="10"> 
</td> 
</tr> 
</form> 
</table> 

</div> 



</td> 
</tr> 
</table> 

</center> 

</body> 
</html>
Un saludo
  #4 (permalink)  
Antiguo 06/08/2006, 06:15
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Hola guapa!!

Muchas gracias por tu ayuda, hasta ahora no he podido venir para agradecerte tu valiosa ayuda, me ha servido casi perfectamente (realmente para lo quería el cliente, perfecto )

Sólo te pido un favor más (ya se que es abusar, pero ¿de quién vamos a aprender si no de l@s maestr@s?), es lo siguiente:

Creo que entiendo casi todo lo que hace el código, pero ¿podrías explicármelo para tenerlo bien claro? Así no sólo es copiar y de paso apredemos tod@s, al fin y al cabo se trata de aprender

Muchas gracias por toda la ayuda que siempre estás dispuesta a brindar y muchos besos (si voy por Barna, te escribiré para conocerte en persona... )
  #5 (permalink)  
Antiguo 06/08/2006, 09:32
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Claro

por partes

resultado = parseFloat(res).toFixed(2).toString();
pasa el resultado a 2 decimales y pasa la variable a tipo string para poder trabajarla con métodos de string

resultado = resultado.split(".");
Separamos la cadena por donde tiene el punto

var cadena = ""; cont = 1
iniciamos una variable como un string vacío y otra que nos servirá como contador

for(m=resultado[0].length-1; m>=0; m--){
Iniciamos una iteración que dé tantas vueltas como caracteres tenga el string que queda delante del punto

cadena = resultado[0].charAt(m) + cadena
A la variable cadena le concatenamos en cada iteración el caracter que esté en la posición m comenzando por el final del string.

cont%3 == 0 && m >0 ? cadena = "." + cadena : cadena = cadena
Comprobamos si la variable cont al dividirla entre 3 devuelve un valor de 0. En caso afirmativo le agrega un punto a la variable cadena (para los separadores de miles). También comprueba que no esté en la última iteración para que no ponga un punto en caso de hacer llegado al principio del string, es decir, para que no quede finalmente algo como .123.123


cont== 3 ? cont = 1 :cont++
Aquí verificamos si la variable cont vale 3. En caso afirmativo la volvemos a poner a 1 (ya pusimos el punto) y en caso negativo la incrementa en 1

frm.result.value = cadena + "," + resultado[1];

Finalmente asignamos el valor del string cadena al campo del formulario y le concatenamos la coma de los decimales y le concatenamos además el otro string que quedó a la derecha del punto del valor incial.

No sé yo si habré sido poco clara

Cita:
si voy por Barna, te escribiré para conocerte en persona...
A ver si es verdad

Un saludo
  #6 (permalink)  
Antiguo 06/08/2006, 09:53
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Munchísimas garcías!!

Lo he leído por encima, pero en principio lo veo muy claro, lo estudiaré con detenimiento para "aprendérmelo" (los fundamentos, claro)

Cita:
A ver si es verdad
Ni lo dudes Besos mil.
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 19:38.