Foros del Web » Programando para Internet » Javascript »

INPUT con decimales

Estas en el tema de INPUT con decimales en el foro de Javascript en Foros del Web. Tengo un input que acepta 10 caracteres, lo que debe hacer (y no hace) es que al escribir el sexto caracter le coloque una coma ...
  #1 (permalink)  
Antiguo 15/11/2005, 09:58
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
INPUT con decimales

Tengo un input que acepta 10 caracteres, lo que debe hacer (y no hace) es que al escribir el sexto caracter le coloque una coma antre el 5to y el sexto numero. O sea 5 enteros 4 decimales
Algo asi: 12345,6789 ó 12345 ó 12345,6

Alguine podria hecharme una manito???????
  #2 (permalink)  
Antiguo 15/11/2005, 10:45
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
ayuda por favor....!
  #3 (permalink)  
Antiguo 15/11/2005, 12:20
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
piedad!!!!
  #4 (permalink)  
Antiguo 15/11/2005, 12:46
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
trata de modificar esta funcion que tengo para formatear un valor y colocarle las comas. de repente te pueda servir

Código PHP:
function formatNmb(nNmb){ 
 var 
sRes ""
 for (var 
jnNmb.length 10>= 0i--, j++) 
 
sRes nNmb.charAt(i) + ((0) && (== 0)? ",""") + sRes
 return 
sRes

me cuentas como te va
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #5 (permalink)  
Antiguo 15/11/2005, 13:51
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
no me funciona
  #6 (permalink)  
Antiguo 15/11/2005, 16:04
Avatar de Baby78  
Fecha de Ingreso: julio-2005
Mensajes: 142
Antigüedad: 18 años, 9 meses
Puntos: 0
A ver si es esto lo que buscas
Código:
<html> 
<head> 
  <script language="JavaScript"> 
   function currencyFormat(fld, milSep, decSep, e) { 
    var sep = 0; 
    var key = ''; 
    var i = j = 0; 
    var len = len2 = 0; 
    var strCheck = '0123456789'; 
    var aux = aux2 = ''; 
    var whichCode = (window.Event) ? e.which : e.keyCode; 
    if (whichCode == 13) return true; // Enter 
    key = String.fromCharCode(whichCode); // Get key value from key code 
    if (strCheck.indexOf(key) == -1) return false; // Not a valid key 
    len = fld.value.length; 
    for(i = 0; i < len; i++) 
     if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break; 
    aux = ''; 
    for(; i < len; i++) 
     if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); 
    aux += key; 
    len = aux.length; 
    if (len == 0) fld.value = ''; 
    if (len == 1) fld.value = '0'+ decSep + '0' + aux; 
    if (len == 2) fld.value = '0'+ decSep + aux; 
    if (len > 2) { 
     aux2 = ''; 
     for (j = 0, i = len - 3; i >= 0; i--) { 
      if (j == 3) { 
       aux2 += milSep; 
       j = 0; 
      } 
      aux2 += aux.charAt(i); 
      j++; 
     } 
     fld.value = ''; 
     len2 = aux2.length; 
     for (i = len2 - 1; i >= 0; i--) 
      fld.value += aux2.charAt(i); 
     fld.value += decSep + aux.substr(len - 2, len); 
    } 
    return false; 
   } 
  </script> 
</head> 
<body> 
  <form> 
   Tipee un número: 

<input type="text" name="test" length="15" onKeyPress="return(currencyFormat(this,',','.',event))"> 
  </form> 
</body> 
</html>
  #7 (permalink)  
Antiguo 15/11/2005, 18:03
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
y así
Cita:
<html>
<head>
<script>
function verif(dig){
temp=dig.value.split(",");
valor=temp.join("");
cuantos=valor.length;
if (cuantos>5){
dig.value=valor.slice(0,5)+","+valor.slice(5);
}else{
dig.value=valor.slice(0,cuantos);
}
}
</script>
</head>

<body>
<form action="" method="get" name="f">
<input name="digitos" type="text" onkeyup="verif(this)" >

</form>
</body>
</html>
tal vez le faltaría validar que solo entren numeros, anque si te sirve luego lo vemos.

Un problemilla: funciona en IE y Firefox, pero en opera tengo problemas con el promt (tambien los tuve con algunas funciones de mascaras de Tunait).
__________________
by Capitán Buscapina
.
  #8 (permalink)  
Antiguo 16/11/2005, 06:38
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
Baby78: aunque es lo que estoy buscando, gracias de todas maneras :)

Cap.Buscapina, es precisamente lo que andaba buscando pero tengo un problema: que sucede si el usuario ingresa un solo entero, luego escribe una coma y luego un decimal???

En el fondo estos son los casos que debe admitir, fijate:

12345,6789 <-- 5 enteros + "," + 4 decimales
12345 <-- 5 enteros o menos, puede ser hasta 1 solo entero y nada mas
5,6 <-- 1 entero + "," + 1 decimal o mas

Puedo ingresar tantos enteros comoo quiera (hasta 5), el asunto es que si ingreso 6 numeros intecalo la coma, pero ademas tambien debo permitir que la coma la ingrese el usuario, en se caso solo debe aceptar 4 decimales y no mas... no se si se entiende la idea :S
  #9 (permalink)  
Antiguo 16/11/2005, 12:22
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
ya me van a colgar en mi trabajo porque eso no me resulta
  #10 (permalink)  
Antiguo 16/11/2005, 15:29
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
y ahora?

Cita:
function verif(dig){
valor=dig.value;
decimales=valor.indexOf(",");
if (valor.length-decimales>5 && decimales!=-1){
dig.value=valor.slice(0,valor.length-1);
alert("solo se admiten 4 decimales");
}else{
if (valor.length>5 && decimales==-1){
dig.value=valor.slice(0,5)+","+valor.slice(5);
}
}
}

aunque en opera sigue con el mismo vicio y por lo tanto no funca bien.
__________________
by Capitán Buscapina
.

Última edición por Cap.Buscapina; 16/11/2005 a las 15:41
  #11 (permalink)  
Antiguo 17/11/2005, 08:37
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
diablos, funciona perfecto!
pero... que pasa si me mete letras??? o solo me pone una coma???
o me pone un enteros una coma y sin decimales??? :S
o una coma , decimales y sin enteros ??? :S
con que funcione en IE me conformo :P
  #12 (permalink)  
Antiguo 17/11/2005, 09:11
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
Cita:
Iniciado por pcarvajal
diablos, funciona perfecto!
pero... que pasa si me mete letras??? o solo me pone una coma???
o me pone un enteros una coma y sin decimales??? :S
o una coma , decimales y sin enteros ??? :S
con que funcione en IE me conformo :P
que tal pcarvajal.... he estado leyendo este post desde que lo iniciaste y la verdad no he visto que hallas intentado hacer algo por ti mismo.... no quiero con esto criticarte ni nada por el estilo pero si yo estuviera en tus pies y si lo que estoy solicitando depende mi trabajo pues no descansaria hasta dar con el problema..... pero no he visto LA VERDAD ningun post tuyo de algo que hallas hecho...
esta bien que aqui se consigue practicamente de todo y que estamos para ayudarnos los unos a los otros pero man.... haz algo tambien

espero que no lo tomes a mal y si estas iniciando con esto del js bueno investiga un poco mas... pero nunca te quedes con lo que los profesores dan en la U.... yo nunca di js en la universidad, esto lo aprendi por mi mismo y mira que investigando y haciendo "locuras" ya tengo un nivel respetable....

saludos y que te termine de ir bien con esto....
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #13 (permalink)  
Antiguo 17/11/2005, 10:34
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 4 meses
Puntos: 8
uf, me dejaste la moral por el suelo...
La verdad de js no se nada de nada, por lo mismo nunca vas a ver un post mio ayudando sobre este tema. De lo poco que se, he respondido y ayudado en el foro ASP, aunque no soy tan experto como muchos de aqui, siempre trato de dar una solucion simple y efectiva ademas de sin tanta "parafernalia" porque mis vagos conocimientos me limitan.

Quizas eso responda a tus dudas.. pero no creas que solo pido, tembien leo mucho el foro, sobretodo utilizando la herramienta del buscador para encontrar scripts interesantes. ¡De hecho me considero el "Cachurero # 1 del Foro!" y desde ahora, esa será mi firma!

Saludos!
  #14 (permalink)  
Antiguo 17/11/2005, 17:49
Avatar de Cap.Buscapina  
Fecha de Ingreso: octubre-2004
Ubicación: Argentina
Mensajes: 836
Antigüedad: 19 años, 6 meses
Puntos: 4
Cita:
que pasa si me mete letras??? o solo me pone una coma???
o me pone un enteros una coma y sin decimales??? :S
o una coma , decimales y sin enteros ??? :S
Reforzando lo que dice el amigo SARUMAN ( ),sería interesante que cuando abras cualquier post, en la medida de lo posible, espesifiques TOOOOODOS los parametro para realizar, ya que si haces como hasta ahora, se complica bastante tener informacion en cuentagotas.

Fiajte en este foro que existen varios script de máscaras para el ingreso de datos, pispiando y pensando podes sacar cosas buenas.
Si no queres que se ingresen letras, con expresiones regulares se haría bastante sencillo (hay varios ejemplos).

Proba y luego postea las dudas que gustosos te ayudaremos.

saludos
__________________
by Capitán Buscapina
.
  #15 (permalink)  
Antiguo 07/10/2008, 12:55
 
Fecha de Ingreso: octubre-2008
Mensajes: 1
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: INPUT con decimales

Cita:
Iniciado por Baby78 Ver Mensaje
A ver si es esto lo que buscas
Código:
<html> 
<head> 
  <script language="JavaScript"> 
   function currencyFormat(fld, milSep, decSep, e) { 
    var sep = 0; 
    var key = ''; 
    var i = j = 0; 
    var len = len2 = 0; 
    var strCheck = '0123456789'; 
    var aux = aux2 = ''; 
    var whichCode = (window.Event) ? e.which : e.keyCode; 
    if (whichCode == 13) return true; // Enter 
    key = String.fromCharCode(whichCode); // Get key value from key code 
    if (strCheck.indexOf(key) == -1) return false; // Not a valid key 
    len = fld.value.length; 
    for(i = 0; i < len; i++) 
     if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break; 
    aux = ''; 
    for(; i < len; i++) 
     if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); 
    aux += key; 
    len = aux.length; 
    if (len == 0) fld.value = ''; 
    if (len == 1) fld.value = '0'+ decSep + '0' + aux; 
    if (len == 2) fld.value = '0'+ decSep + aux; 
    if (len > 2) { 
     aux2 = ''; 
     for (j = 0, i = len - 3; i >= 0; i--) { 
      if (j == 3) { 
       aux2 += milSep; 
       j = 0; 
      } 
      aux2 += aux.charAt(i); 
      j++; 
     } 
     fld.value = ''; 
     len2 = aux2.length; 
     for (i = len2 - 1; i >= 0; i--) 
      fld.value += aux2.charAt(i); 
     fld.value += decSep + aux.substr(len - 2, len); 
    } 
    return false; 
   } 
  </script> 
</head> 
<body> 
  <form> 
   Tipee un número: 

<input type="text" name="test" length="15" onKeyPress="return(currencyFormat(this,',','.',event))"> 
  </form> 
</body> 
</html>
Me podes explicar como puedo hacer para variar la cantidad de decimales. Es decir tengo campos dinamicos de 1 , 2, 3 y 4 decimales no solamente de dos . Lo estuve buscando pero no me esta saliendo.

Saludos

Sebastian Moraga
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 20:03.