Foros del Web » Programando para Internet » Javascript »

Anteponer String para formato de Moneda

Estas en el tema de Anteponer String para formato de Moneda en el foro de Javascript en Foros del Web. Saludos amigos del foro, tengo ina inquietud por aca, a ver en que me pueden ayudar, lo que sucede es que estoy necesitando hacer con ...
  #1 (permalink)  
Antiguo 23/08/2007, 11:02
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 9 meses
Puntos: 5
Información Anteponer String para formato de Moneda

Saludos amigos del foro, tengo ina inquietud por aca, a ver en que me pueden ayudar, lo que sucede es que estoy necesitando hacer con Javascript una funcion que me permita dar formato a una cadena de texto en un textbox, y que al procesar los datos a un PHP o ASP se tome como valor de moneda..

El asunto es basicamente enmascarar el contenido del textbox por ejemplo:
(Los corchetes indican que es el contenido del textbox)
[ US$. 5.000,00 ] para el caso de los dolares, esto se refiere a que los 3 primeros caracteres (La cadena que deseo insertar {US$}) y en el resto segun el tipo de moneda colocar la coma antes de los 2 ultimos digitos, y el punto cada 3 digitos...

Espero no infortunar a nadie con esta consulta, ya que practicamente no tengo mas que la idea, pienso que contando los caracteres de la cadena cadena.length, y algo de charAt() y subString() se pueda lograr.

Saludos y gracias a todos por su valiosa colaboracion!!
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #2 (permalink)  
Antiguo 23/08/2007, 17:01
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Anteponer String para formato de Moneda

Veamos... lo que se escribe en la caja de texto es "5000" y tú quieres formatearlo para que quede así "US$ 5.000,00". ¿Lo he entendido bien?

Tienes alguna FAQ para puntuar cifras, alguna la he escrito yo. ¿Sólo tiene que admitir US$ o también tiene que admitir EUR€ ? La cosa se complicaría un pelín.

Explica qué quieres decir con enmascarar. Se pueden escribir barras bajas con el formato estipulado para que el usuario introduzca sus números ahí (muy complicado) o se puede formatear el campo una vez pierde el foco (modo sencillo).

¿Qué requisitos se necesitan para que ASP o PHP lo tomen como valor de moneda?

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 24/08/2007, 14:32
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 9 meses
Puntos: 5
Re: Anteponer String para formato de Moneda

Bien estimado derkenuke, en efecto lo que se escribe en la caja es 5000, pero en algun lugar vi algo parecido y en lugar de 5000 deberia escribirse 500000 los 2 ultimos ceros indicarian los decimales {centimos}, si debe admitir mas de 1 formato de moneda, (US$, EUR€, Bs., etc..) lo cual pienso que no seria tanto problema si se introducen en un array:
moneda = new Array["EUR","US$","Bs.","etc."] y con un switch(moneda) se selecciona la moneda, segun la cual varia el formato de los puntos y de las comas, (0.000,00 / 0,000.00).. Segun creo deberia formatearse con el evento onkeypess="darFormato()" para que el usuario vaya viendo lo que al final sera el monto real..

Digo enmascarar, porque como hay que realizar operaciones con los montos (sumas, restas, multiplicaciones y divisiones), al momento de tomar el valor se descartan los caracteres de texto (EUR, US$, Bs., Etc) y se utiliza solo la cantidad numerica (0.000,00)..
Finalmente, pues los valores que se le pasan al ASP o PHP serian los resultados numericos o valores finales.

Espero haber sido lo mas entendible posible.. Saludos!!
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #4 (permalink)  
Antiguo 25/08/2007, 17:21
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Anteponer String para formato de Moneda

Quizás se pueda hacer, he hecho algún formateador simple para moneda, pero no le anteponía string, es la FAQ #249 y #250.

Hay que entender un par de cosas. ¿Qué hay en la caja de texto inicialmente? Supongo que la cadena de la moneda en cuestión, por ejemplo "US$". El usuario va escribiendo. Si escribe un 5 aparece "US$ 5,00", si escribe un 1 luego: "US$ 51,00", luego un 2: "US$ 512,00" y luego un 7: "US$ 5.127,00". Si escribe una coma estaría pasando a los decimales, entonces un 12 después de eso daría "US$ 5.127,12"; ¿y si escribe más caracteres? ¿No le dejamos? ¿Cómo podemos editar esa cantidad?

Es un script un poco complicado, como ves. Lo que sí es fácil de hacer es escribir "5127,12" en un campo y al lado actualizar la vista a "bonita" con "US$ 5.127,12".



Si no es así explíca bien lo que quieres conseguir, que tiene su tejemaneje.
Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 27/08/2007, 15:22
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 9 meses
Puntos: 5
Re: Anteponer String para formato de Moneda

Inicialmente la caja de texto debe estar en US$ 0.00, al teclear 512 deberia quedar algo como 5.12 entonces para llegar a 512 deberiamos teclear 51200 lo cual nos dejaria: 512.00, el problema del string delante del valor, al parecer es complicado.. Aun cuando es el motivo Principal de este post, cre que debere optar por descartarlo, sin embargo, intentare hacer algo con el codigo de la FAQ #250..

Tambien puede ser del modo que se aplica en ese ejemplo, primero introduces el monto 512 luego la coma (,) y despues los decimales..

Hare algunas pruebas con otras ideas que tengo y luego posteo el codigo..

Ah! por cierto he visto en otros posts y ejemplos de codigo que utilizan Corchetes, llaves, slashes, entre otros signos para formatear... Si alguien me pudiera explicar algo al respecto..

Saludos!!
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #6 (permalink)  
Antiguo 27/08/2007, 18:42
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Anteponer String para formato de Moneda

Es taaan complicado de programar (lo intenté, y algo salió, pero fue un lío) que mejor que te mires alguna librería...
Ví en un post este vínculo que te gustaría... creo que podría ser capaz de hacer algo parecido a lo que pides.


Un saludo y coméntanos progresos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 28/08/2007, 09:42
Avatar de messer  
Fecha de Ingreso: julio-2004
Mensajes: 467
Antigüedad: 19 años, 9 meses
Puntos: 5
Re: Anteponer String para formato de Moneda

Estuve revisandon las FAQs y encontre un codigo que lo hace, pero no permite editar las cantidades. Te comento que ya habia visto ese link desde otro post, lo guarde para analizarlo, pero cuando lo vi, pues mi sorpresa!! no entendi nada!! no se como se llaman los eventos, la funcion se ejecuta con una etiqueta alt="" o algo parecido, y los archivos .JS o estan encriptados o es algo demasiado profundo para mi (que no soy muy Ducho con el Javascript), si has probado descargarlo y has visto el codigo sabras de lo que hablo, si no lo has hecho, pues hazlo!! y a ver si puedes comentar algo al respecto..

A continuacion pongo el codigo:

Código PHP:
<script language="JavaScript">
   function 
currencyFormat(fldmilSepdecSepe) {
    var 
sep 0;
    var 
key '';
    var 
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(
0leni++)
     if ((
fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
    
aux '';
    for(; 
leni++)
     if (
strCheck.indexOf(fld.value.charAt(i))!=-1aux += fld.value.charAt(i);
    
aux += key;
    
len aux.length;
    if (
len == 0fld.value '';
    if (
len == 1fld.value '0'decSep '0' aux;
    if (
len == 2fld.value '0'decSep aux;
    if (
len 2) {
     
aux2 '';
     for (
0len 3>= 0i--) {
      if (
== 3) {
       
aux2 += milSep;
       
0;
      }
      
aux2 += aux.charAt(i);
      
j++;
     }
     
fld.value '';
     
len2 aux2.length;
     for (
len2 1>= 0i--)
      
fld.value += aux2.charAt(i);
     
fld.value += decSep aux.substr(len 2len);
    }
    return 
false;
   }
  
</script> 
Ese es el codigo que consegui en las FAQ, este no permite editar montos como dije anteriormente, sin embargo, hacemos que reconozca la tecla backspace o escape y reseteamos el campo, sera posible introducir el valor nuevamente;

Código PHP:
if(whichCode == || whichCode == 8){fld.value fld.defaultValue;} 
No es mayor aporte ni la mejor solucion pero es una manera de darle la vuelta..

Seguire intentando y comento.. Saludos!!!
__________________
<script type="text/messerScript"><!--
window.onload=function(){ loadMesserRules(this.href) }
--></script>
  #8 (permalink)  
Antiguo 10/01/2011, 11:52
Avatar de johnmad  
Fecha de Ingreso: diciembre-2010
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Anteponer String para formato de Moneda

alguien me puede ayudar con este codigo, se supones que debo modificar los cero , es decir que se puedan modificar al momento de que escribes el numero , en este codigo no puedo hacer eso, desde ya gracias


<HEAD>
<META HTTP-EQUIV="expires" CONTENT="Sat, 01 Dec 2001 00:00:00 GMT">
<META HTTP-EQUIV="expires" CONTENT="0">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="cache-conTRol" CONTENT="no-cache">
<TITLE>Unibolsa</TITLE>
</HEAD>

<script language="javascript">
function fn_vldNum(ND){
ND=ND==null?0:ND,
vl=window.event.srcElement.value,
crsrPos=getCursorPos();
tc=String.fromCharCode(window.event.keyCode);

if ( ND!=0 && vl.indexOf(".")==-1 && tc=="." ) return true;
if( isNaN ( parseInt(tc,10) ) ) {
window.event.keyCode=" ";
if ( tc=="." && crsrPos <= vl.indexOf(".") ) {
setCursorPos( vl.indexOf(".") + 1 );
}
}
if( vl.indexOf(".") != 0 && crsrPos > vl.indexOf(".") ) {
var elem = vl.split(".",2);
if( elem[1].length >= ND ) {
window.event.keyCode=" ";
return false;
}
}
return true;
}
function setComas() {
trgt=window.event.srcElement, vl = trgt.value,
Num=vl.replace(/,/gi, ""),
dec=Num.indexOf("."),
end=dec>-1?""+Num.substring(dec,Num.length):".00",
Num=""+parseInt(Num),
temp1="",
temp2="",
count=0;
crsrPos=getCursorPos();
// alert(vl);

if(isNaN(Num)) Num="0";
if(end.length==2) end+="0";
if(end.length==1) end+="00";
if(end=="") end+=".00";
for(k=Num.length-1;k>=0;k--) {
oneChar=Num.charAt(k);
if(count==3) { temp1=temp1+","+oneChar,count=1; continue; }
else temp1=temp1+oneChar,count++;
}
for(k=temp1.length-1;k>=0;k--) oneChar=temp1.charAt(k), temp2+=oneChar;
// return temp2+end;

trgt.value=temp2+end;
setCursorPos( crsrPos );
return true;
}

function getCursorPos() {
var tb = window.event.srcElement;
cursor = -1;
if (document.selection && (document.selection != 'undefined')) {
var _range = document.selection.createRange();
contador=0;
while (_range.move('character', -1)) contador++;
cursor = contador;
}
else if (tb.selectionStart >= 0 ) cursor = tb.selectionStart;
return cursor;
}

function setCursorPos(crsrPs) {
oField = window.event.srcElement;
if (document.selection) {
oField.focus ();
var oSel = document.selection.createRange();

/*if(oField.value.length == 8 && tc == "."){
crsrPs = 6;
}*/
if(oField.value.length == 8 && tc != ".") crsrPs = 5; //4
if(oField.value.length == 12 && tc != ".") crsrPs = 9; //7
if(oField.value.length == 16 && tc != ".") crsrPs = 13;
if(oField.value.length == 20 && tc != ".") crsrPs = 17;
if(oField.value.length == 24 && tc != ".") crsrPs = 21;
if(oField.value.length == 28 && tc != ".") crsrPs = 25;
oSel.moveStart ('character', -oField.value.length);
oSel.moveStart ('character', crsrPs);
//oSel.moveEnd ('character', crsrPs);
oSel.moveEnd ('character', 0);
oSel.select();
oSel.moveStart ('character', crsrPs);
}
else if (oField.selectionStart || oField.selectionStart == '0') {
oField.selectionStart = crsrPs;
oField.selectionEnd = crsrPs;
oField.focus ();
}
}

function ffn_FrmtNm(field,trgt) {
trgt=trgt==null?field:trgt,
Num=field.value.replace(/,/gi, ""),
dec=Num.indexOf("."),
end=dec>-1?""+Num.substring(dec,Num.length):".00",
Num=""+parseInt(Num),
temp1="",
temp2="",
count=0;
if(isNaN(Num)) Num="0";
if(end.length==2) end+="0";
if(end.length==1) end+="00";
if(end=="") end+=".00";
for(k=Num.length-1;k>=0;k--) {
oneChar=Num.charAt(k);
if(count==3) { temp1=temp1+","+oneChar,count=1; continue; }
else temp1=temp1+oneChar,count++;
}
for(k=temp1.length-1;k>=0;k--) oneChar=temp1.charAt(k), temp2+=oneChar;

trgt.value=temp2+end;
return true;
}

function fn_FrmtNmCap(field,trgt) {
trgt.value=parseInt(field.value.replace(/,/gi, ""));
return true;
}

</script>
<input type="text" id="mi_texto" name="inVld" value="" OnKeyPress="if ( fn_vldNum(2) ) ;" onkeyup=" setComas(); ">

<SCRIPT>
function obten_elemento(){
var mi_campo = document.getElementById("mi_texto");
if(mi_campo.value != ""){
alert("has escrito: " +mi_campo.value);
var miCadena = mi_campo.value;
var elem = miCadena.split(".",2);
entero = elem[0];
decimal = elem[1];
}
else alert("introduce el numero");
}
</SCRIPT>
  #9 (permalink)  
Antiguo 10/01/2011, 11:53
Avatar de johnmad  
Fecha de Ingreso: diciembre-2010
Mensajes: 6
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Anteponer String para formato de Moneda

mi correo es [email protected]
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 09:27.