Foros del Web » Programando para Internet » Javascript »

Separar los miles al introducir un número

Estas en el tema de Separar los miles al introducir un número en el foro de Javascript en Foros del Web. Tengo un formulario para meter cantidades, y quiero, que al meter por ejemplo la cifra 1234567.89 me aparezca 1.234.567,89 para que se vean bien las ...
  #1 (permalink)  
Antiguo 26/07/2006, 04:31
 
Fecha de Ingreso: agosto-2004
Mensajes: 182
Antigüedad: 19 años, 8 meses
Puntos: 1
Información Separar los miles al introducir un número

Tengo un formulario para meter cantidades, y quiero, que al meter por ejemplo la cifra 1234567.89 me aparezca 1.234.567,89 para que se vean bien las separaciones en cifras grandes.

Mi duda es que no se si cuando haga el "onchange" digeramos es cuando se hace, o a la vez que se va escribiendo se puede ir haciendo, con alguna especie de plantilla tal que asi _ _ _ . _ _ _ . _ _ _ , _ _ y que vaya poniendo los números encima.

¿Hay algún ejemplo por ahí?, ¿alguien sabe como hacerlo?.

Gracias de antemano, un saludo.
  #2 (permalink)  
Antiguo 26/07/2006, 04:37
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 17 años, 10 meses
Puntos: 0
Pues así a priori con split puedes separar el entero del decimal.
Luego recorres hacia atrás los números (con substr por ejemplo) y cada 3 cifras agregas un punto.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 26/07/2006, 04:56
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,

hace un tiempo hice este, mira si te sirve

el script es este

Código:
<script type="text/javascript">
/*****************************************************************************
Código para colocar los indicadores de miles  y decimales mientras se escribe
Script creado por Tunait!
Si quieres usar este script en tu sitio eres libre de hacerlo con la condición de que permanezcan intactas estas líneas, osea, los créditos.

http://javascript.tunait.com
[email protected]  27/Julio/03
******************************************************************************/
function puntitos(donde,caracter,campo)
{
var decimales = true
dec = campo
pat = /[\*,\+,\(,\),\?,\\,\$,\[,\],\^]/
valor = donde.value
largo = valor.length
crtr = true
if(isNaN(caracter) || pat.test(caracter) == true)
	{
	if (pat.test(caracter)==true) 
		{caracter = "\\" + caracter}
	carcter = new RegExp(caracter,"g")
	valor = valor.replace(carcter,"")
	donde.value = valor
	crtr = false
	}
else
	{
	var nums = new Array()
	cont = 0
	for(m=0;m<largo;m++)
		{
		if(valor.charAt(m) == "." || valor.charAt(m) == " " || valor.charAt(m) == ",")
			{continue;}
		else{
			nums[cont] = valor.charAt(m)
			cont++
			}
		
		}
	}

if(decimales == true) {
	ctdd = eval(1 + dec);
	nmrs = 1
	}
else {
	ctdd = 1; nmrs = 3
	}
var cad1="",cad2="",cad3="",tres=0
if(largo > nmrs && crtr == true)
	{
	for (k=nums.length-ctdd;k>=0;k--){
		cad1 = nums[k]
		cad2 = cad1 + cad2
		tres++
		if((tres%3) == 0){
			if(k!=0){
				cad2 = "." + cad2
				}
			}
		}
		
	for (dd = dec; dd > 0; dd--)	
	{cad3 += nums[nums.length-dd] }
	if(decimales == true)
	{cad2 += "," + cad3}
	 donde.value = cad2
	}
donde.focus()
}	
</script>
Y al campo que quieras aplicárselo le has de poner un
onkeyup="puntitos(this,this.value.charAt(this.valu e.length-1),2)"

El 2 que te puse en rojo es la cantidad de decimales que quieres que saque.

puedes probarlo aquí http://javascript.tunait.com/javascr....asp?s=puntos2

Un saludo
  #4 (permalink)  
Antiguo 26/07/2006, 05:14
 
Fecha de Ingreso: agosto-2004
Mensajes: 182
Antigüedad: 19 años, 8 meses
Puntos: 1
Gracias a ambos, mas o menos dijeramos que una vez puesto el número después si que era mas facil de cambiar. Pero lo que ha puesto Tunait es lo que buscaba, eso si, ahi hay un problema, que el tio no pone primero los decimales, sino que eso se pone lo último siempre y para diferenciarlos escribirá un punto o una coma, y aquí no te da opción, vamos, que lo tienes que avisar antes si tiene decimales.

¿Hay algo por ahí que ponga lo mismo que lo de Tunait pero que vaya poniendo puntos hasta el momento que se ponga una coma o un punto por el usuario y entonces ya ponga los decimales? ... ¿o a dicho javascript se le puede poner siempre por defecto un ,00 al final y que si quiere el usuario lo cambie?.
  #5 (permalink)  
Antiguo 27/07/2006, 01:35
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta como puedo modificar usando una comita

hola Tunait como podria modificar el script para que ponga las sifras
de esta manera

1,450.00
25,000.00
etc
__________________
gerardo
  #6 (permalink)  
Antiguo 27/07/2006, 02:39
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
Cita:
Iniciado por chalchis
hola Tunait como podria modificar el script para que ponga las sifras
de esta manera

1,450.00
25,000.00
etc
Así

Código:
<script type="text/javascript">
/*****************************************************************************
Código para colocar los indicadores de miles  y decimales mientras se escribe
Script creado por Tunait!
Si quieres usar este script en tu sitio eres libre de hacerlo con la condición de que permanezcan intactas estas líneas, osea, los créditos.

http://javascript.tunait.com
[email protected]  27/Julio/03
******************************************************************************/
function puntitos(donde,caracter,campo)
{
var decimales = true
dec = campo
pat = /[\*,\+,\(,\),\?,\\,\$,\[,\],\^]/
valor = donde.value
largo = valor.length
crtr = true
if(isNaN(caracter) || pat.test(caracter) == true)
	{
	if (pat.test(caracter)==true) 
		{caracter = "\\" + caracter}
	carcter = new RegExp(caracter,"g")
	valor = valor.replace(carcter,"")
	donde.value = valor
	crtr = false
	}
else
	{
	var nums = new Array()
	cont = 0
	for(m=0;m<largo;m++)
		{
		if(valor.charAt(m) == "." || valor.charAt(m) == " " || valor.charAt(m) == ",")
			{continue;}
		else{
			nums[cont] = valor.charAt(m)
			cont++
			}
		
		}
	}

if(decimales == true) {
	ctdd = eval(1 + dec);
	nmrs = 1
	}
else {
	ctdd = 1; nmrs = 3
	}
var cad1="",cad2="",cad3="",tres=0
if(largo > nmrs && crtr == true)
	{
	for (k=nums.length-ctdd;k>=0;k--){
		cad1 = nums[k]
		cad2 = cad1 + cad2
		tres++
		if((tres%3) == 0){
			if(k!=0){
				cad2 = "," + cad2
				}
			}
		}
		
	for (dd = dec; dd > 0; dd--)	
	{cad3 += nums[nums.length-dd] }
	if(decimales == true)
	{cad2 += "." + cad3}
	 donde.value = cad2
	}
donde.focus()
}	
</script>
Un saludo
  #7 (permalink)  
Antiguo 27/07/2006, 02:49
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
Cita:
Iniciado por Gugu_Tata
ahi hay un problema, que el tio no pone primero los decimales, sino que eso se pone lo último siempre y para diferenciarlos escribirá un punto o una coma, y aquí no te da opción, vamos, que lo tienes que avisar antes si tiene decimales.
El script no hace que deban ponerse primero los decimales. Lo que hace es dar formato a medida que se escriben las cifras. Si queremos poner 1.234,55 basta con escribir 12345 y el script se encarga de darle el formato sin tener que preocuparse de nada más.

Cita:
¿Hay algo por ahí que ponga lo mismo que lo de Tunait pero que vaya poniendo puntos hasta el momento que se ponga una coma o un punto por el usuario y entonces ya ponga los decimales? ... ¿o a dicho javascript se le puede poner siempre por defecto un ,00 al final y que si quiere el usuario lo cambie?.
...pues no lo sé, es probable que algo haya, es cuestión de rebuscar por sitios de scripts

Un saludo
  #8 (permalink)  
Antiguo 27/07/2006, 06:44
 
Fecha de Ingreso: agosto-2004
Mensajes: 182
Antigüedad: 19 años, 8 meses
Puntos: 1
No me vale Tunait, es lo que quiero pero no me vale porque da problemas con los decimales y tal y luego ademas con el número ese escrito tengo que hacer operaciones para lo que me tendría que quedar el número sin los puntos ni nada, en fin, un lio.

Ahora estoy pensando en hacerlo despues de poner el número en el on lost focus, y que realmente guarde otro valor.
  #9 (permalink)  
Antiguo 07/08/2006, 22:33
Avatar de univercity  
Fecha de Ingreso: noviembre-2002
Mensajes: 681
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola Tunait, estube tratando de hacer funcionar tu codigo pero la verdad es que en Javascripts soy super basico, y no se que es lo que tengo mal, copie tu codigo tal cual, pero me da un error y simplemente no hace lo que tiene que hacer, yo no quiero decimales simplemente quiero que coloque los "puntitos", a los numeros que se estan ingresando.

Hay algo que agregar al codigo cuando lo quiero hacer funcionar?
__________________
"Lo importante es nunca dejar de hacerse preguntas"
Albert Einstein
  #10 (permalink)  
Antiguo 25/08/2006, 10:19
 
Fecha de Ingreso: agosto-2006
Mensajes: 1
Antigüedad: 17 años, 8 meses
Puntos: 0
puntos

sucede que he heco todo lo que dices y he creado un campo de la siguiente manera
<input name="cedula" type="text" size="15" onkeyup="puntitos(this,this.value.charAt(this.valu e.length-1),2)">
pero no me da resultado, solo aparecen los numeros pero no los numeros me podias colaborar

mi email es [email protected] agradezco tu colaboracion
  #11 (permalink)  
Antiguo 03/07/2009, 22:18
 
Fecha de Ingreso: noviembre-2008
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Separar los miles al introducir un número

lo siento hermanos no anda el codigo
marca algunos valores no definidos
  #12 (permalink)  
Antiguo 26/09/2009, 10:30
 
Fecha de Ingreso: julio-2004
Mensajes: 11
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Separar los miles al introducir un número

Cita:
Iniciado por k1r02 Ver Mensaje
lo siento hermanos no anda el codigo
marca algunos valores no definidos
Hola amigos, he ingresado el codigo pero no funciona, si alguno de ustedes lo ha hecho funcionar por favor publiquelo en este foro. Les agradeceria mucho.
  #13 (permalink)  
Antiguo 02/01/2012, 13:02
Avatar de Bizo21  
Fecha de Ingreso: abril-2004
Ubicación: Valdivia
Mensajes: 93
Antigüedad: 20 años
Puntos: 1
Respuesta: Separar los miles al introducir un número

tarde una respuesta.. pero como dicen por ahi mejor tarde que nunca...
posiblemente es por que en el input lo estas llamando mal, por lo menos ami me funciono:

tu lo tienes asi :
<input name="cedula" type="text" size="15" onkeyup="puntitos(this,this.value.charAt(this.valu e.length-1),2)">

pero debería ser así :

<input name="cedula" type="text" size="15" onkeyup="puntitos(this,this.value.charAt(this.valu e.length-1),2)">

lo que cambia es this.value.lenght en el ejemplo lo escribieron mal this.valu e.lenght por eso no funciona
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 15:07.