Comunidad de diseño web y desarrollo en internet online

Formateando entradas

Citar            
MensajeEscrito el 10 Mar 2009 04:23 pm
Estoy trabajando con una aplicación que maneja números y la estamos internacionalizando, la traducción se realizo y el formato de los número en la salida esta perfecto, el problema es con la entrada de los datos pues no se como hacer para que tome los valores que yo quiero es decir...

Tengo un TextInput donde recibo un número por ejemplo nosotros usamos la coma (,) como separador decimal y en en_US usan el punto (.) que esta por defecto, como mencione anteriormente en la salida puedo cambiar el . por una , pero la idea es que el usuario pueda meter la coma sin problemas, el problemas es que si meto una , el sistema la toma como separador de miles que es lo que pasa en la configuración en_US.

¿¿¿Hay alguna forma de configurar el formato de entrada para los números???

Por figux

12 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 10 Mar 2009 04:29 pm
Hola

Si estas usando flex, podes utilizar NumberFormatter, en donde le especificas el separador de miles y de decimales dependiendo el idioma seleccionado

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 10 Mar 2009 05:45 pm
ok, pero no se si me entendieron bn...

tengo un TextInput... este recibe un número, en colombia usamos la , como separador decimal asi que yo introduciria 1,5 para obtener el numero 1 1/2 el problema es que flex toma la coma como separador de miles o simplemente cuando intento pasar el String a número no sabe como interpretar la ,

Intente como me respondieron pero no se cuando activar o como llamar la funcion de NumberFormatter...

Por figux

12 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 10 Mar 2009 06:48 pm
hola

La podes activar en el change o en el blur del TextInput.

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 10 Mar 2009 07:30 pm
Pongo algo de codigo para que entiendan el problema... lo he intentado mucho como me han respondio pero nada:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="606" height="260">

<mx:Script>
   <![CDATA[
      public function formato(item:Object):void{
         respuesta.text = currencyFormatter.format(item.text); 
      }
   ]]>
</mx:Script>

<mx:CurrencyFormatter id="currencyFormatter" precision="2" thousandsSeparatorTo="," decimalSeparatorTo="." />  

   <mx:Button x="283" y="126" label="Convertir" click="formato(numero)"/>
   <mx:TextInput x="71" y="126" id="numero"/>
   <mx:Label x="396" y="128" text="Numero Formateado" id="respuesta"/>
   <mx:Label x="71" y="32" text="Convertir del formato español a formato ingles"/>
   <mx:Label x="71" y="100" text="Ingreso el numero (, decimales)"/>
   
</mx:Application>

El codigo anterior crea un textinput donde se introduce el numero por ejemplo 1,5 y hay un label para la respuesta sin embargo el sistema toma la coma como separador de miles y el 1,5 lo combierte en 15.00

Si hacemos el siguiente cambio en el codigo:

Código :

<mx:CurrencyFormatter id="currencyFormatter" precision="2" thousandsSeparatorTo="." decimalSeparatorTo="," />


tenemos como resultado que el 1,5 se convierte 15,00 y 1,500 en 1.500,00 que es la salida con nuestros separadores pero para la entrada en ingles... es decir 1.500 en ingles es 1,500 y lo que busco es lo contrario que cuando introduzca 1,5 se convierta en 1.5

Por figux

12 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 10 Mar 2009 08:59 pm
Desarrolle dos funciona de pronto las necesiten, la primera es un poco anticuada por que toca decirle cuales son los valores a reemplazar y si se tiene muchos idiomas seria muy tedioso ese mantenimiento, pero usa expresiones regulares para crear los cambios

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="606" height="260">

<mx:Script>
   <![CDATA[
      public function formato(item:Object):void{
         respuesta.text = currencyFormatter.format(item.text); 
      }
      
      public function formatoUS(item:Object):void{
         //Buscar el separador de decimales en el idioma que deseamos
         var numero:String = item.text;
         //Limpiamos la cadena de simbolos de pesos y de separador miles
         //Los simbolos dependen del idioma
         var regEx:RegExp = /[.$]/g;
         var formattedCharges:String = numero.replace(regEx,"");
         //Reemplazamos el separador de decimales por uno valido
         var myPattern:RegExp = /,/gi;
         respuesta2.text = formattedCharges.replace(myPattern, ".");
         
                       
      }
      
      public function calculate(item:Object):void{
         formato(item);
         formatoUS(item);
         
      }
   ]]>
</mx:Script>

<mx:CurrencyFormatter id="currencyFormatter" precision="2" thousandsSeparatorTo="." decimalSeparatorTo="," />  

   <mx:Button x="283" y="126" label="Convertir" click="calculate(numero)"/>
   <mx:TextInput x="71" y="126" id="numero"/>
   <mx:Label x="396" y="128" text="Numero Formateado" id="respuesta"/>
   <mx:Label x="71" y="32" text="Convertir del formato español a formato ingles"/>
   <mx:Label x="71" y="100" text="Ingreso el numero (, decimales)"/>
   <mx:Label x="396" y="154" text="Respuesta Funcion Propia" id="respuesta2"/>
   
</mx:Application>



La segunda utiliza internacionalizacion... donde pruebas es un label

Código :

            private function formatoUS(item:String):void{
               //Metodo Largo
               //Suponemos que el simbolo de la moneda esta en la primera posicion de la cadena, por lo tanto el numero estara en la posicion 1 de arreglo
               var moneda:Array = item.split(resourceManager.getString('FormattingValues', 'CURRENCY_SYMBOL'));
               var numero:String;
               
               if(moneda.length == 2){
                  numero = moneda[1].toString();   
               }else{
                  numero = item;
               }   
                     
               //Buscamos el separador de miles
               var sinMiles:Array = numero.split(resourceManager.getString('FormattingValues', 'THOUSANDS_SEPARATOR'));
               if(sinMiles.length > 1){                       
                  //Creamos una nueva cadena sin el separador de miles pero dejando el "numero" intacto
                  var tam:int = sinMiles.length;
                  var resultado:String = "";
                  for(var i:int=0;i < tam; i++){
                     resultado = resultado + sinMiles[i].toString();
                  }
               }else{
                  resultado = numero;
               }
               //Por ultimo cambiamos el separador de decimales
               var sinD:Array = resultado.split(resourceManager.getString('FormattingValues', 'DECIMAL_SEPARATOR'));
               //Solo deberia haber uno asi que el arreglo estara dividido en dos partes si existe 
               if(sinD.length == 2){
                  resultado = sinD[0].toString() + "." +sinD[1].toString();   
               }          
                
               pruebas.text = resultado;
               
            }

Por figux

12 de clabLevel



 

Colombia

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.