Matheusczr 0 Denunciar post Postado Agosto 5, 2009 Olá. Estou tentando criar uma mascara para moeda em AS 2.0 Não achei nada sobre isso aqui no fórum e nem no google Agradeço a quem puder me ajudar. Por enquanto estou tentanto fazer o arredondamento do número para que quando eu tenha um 10.90 por exemplo, dai me mostre 10.90 e não 10.9. Consigo indicar através de: Texto.restrict = "0-9.,";que o campo irá aceitar apenas os numeros de 0 a 9, "." e "," preciso que esses dois apareçam apenas uma vez e na posição certa. Desde já agradeço. Enter.onPress = function() { /* //Reduz a 2 Casas Decimais Texto.text *= 20; Texto.text = Math.round (Texto.text); Texto.text /= 20; Mostra.text=Texto.text; //10.90 -> Mostra 10.9 -> Aqui eu quero que apareça 10.90 / // Mostra.text = Math.floor((100*Texto.text)/100); //10.90 -> Mostra 10 // Mostra.text=Math.ceil(Texto.text); //10.90 -> < Mostra 11 // Mostra.text=Math.round(Texto.text); //10.90 -> < Mostra 11 // Mostra.text=Math.floor(Texto.text); //10.90 -> < Mostra 10 }*/ Através desse outro código, consigo separar os dois ultimos digitos depois do ponto, acho q vai ajudar quem for me ajudar: //Retorna Duas Casas Decimais após o ponto: 10.9020 -> 10.90 || 10.9 -> 10.9 var numero:String = (Texto.text).toString() var pos:Number; pos=numero.indexOf('.', 0) trace(numero.substring(0,pos+3)); Esse código deveria substituir o que for diferente de ".", "," e digitos de 0 a 9 Texto.restrict = "0-9.,"; var keyListener:Object = new Object(); Key.addListener(keyListener);//adiciona ouvinte para receber os eventos de teclado keyListener.onKeyDown = function() {//quando pressionado alguma tecla, faça... substitui(Texto); } function substitui(Texto){ var i:Number; for(i=0;i<=Texto.length;i++){ // if(Texto.charAt(i) != "."){ // Texto.text = Texto.replace(Texto.charAt(i), ""); //Texto.text=Texto.text.charAt(i); Texto.text=Texto.text.replace(Texto.text.charAt(i),"0"); // } } } Compartilhar este post Link para o post Compartilhar em outros sites
Matheusczr 0 Denunciar post Postado Agosto 5, 2009 Criei essa função para arredondar números, mas não sei porque essa linha: pos=num.indexOf('.', 0); não tá funcionando function arredonda(num) { //Reduz a 2 Casas Decimais num *= 100; num = Math.round (num); num /= 100.00000001; //Retorna Duas Casas Decimais após o ponto: 10.9020 -> 10.90 || 10.9 -> 10.9 var pos:Number; pos=num.indexOf('.', 0); //return this.num.substring(0,pos+3); MPeriodo.text=pos; // MPeriodo.text=num.text.substring(0,pos+3); } Compartilhar este post Link para o post Compartilhar em outros sites
Matheusczr 0 Denunciar post Postado Agosto 6, 2009 Esse código deverá fazer a mascara tipo R$ 10.000,00, porém ainda não ta ok. Se alguem puder ajudar, agradeço. Texto.maxChars = 12; Texto.restrict = "R$ 0-9.,"; //Chama função ao Levantar das teclas var keyListener:Object = new Object(); Key.addListener(keyListener);//adiciona ouvinte para receber os eventos de teclado keyListener.onKeyUp = function() {//quando pressionado alguma tecla, faça... //FUNÇÃO SUBSTITUI String.prototype.replace = function(text, replacetext) { return this.split(text).join(replacetext); }; //trace("ffffffabbb".replace("a", "x"));//Para Teste Texto.text=Texto.text.replace(",","."); var i:Number; for (i=2;i<=Texto.length;i++) { //Se após o R$ for R, substitui por vazio if (Texto.text.substring(i)=="R") { Texto.text=Texto.text.replace(Texto.text.substring(i),""); } } for (i=3;i<=Texto.length;i++) {//Se após o R$ for S, substitui por vazio if (Texto.text.substring(i)=="$") { Texto.text=Texto.text.replace(Texto.text.substring(i),""); } } Texto.text=Texto.text.replace(Texto.text.substring(0),"R$")+Texto.text.substring(2);//Garante o R$ } Compartilhar este post Link para o post Compartilhar em outros sites
Andre Cocuroci 0 Denunciar post Postado Agosto 6, 2009 Uso essa classe: class Converte { public static function textoEmNumero(v:String):Number { if (!isNaN(v)) var v:String = numeroEmFracao(Number(v)); var char:Array = [v.split(",")[0].split(""), v.split(",")[1].split("")]; var numeros:Array = [[],[]]; for (var i = 0; i < char.length; i++) { for (var j = 0; j < char[i].length; j++) if (!isNaN(char[i][j])) numeros[i].push(char[i][j]); } var esq:String = numeros[0].join(""); var dir:String = numeros[1].join(""); return Number(esq + "." + dir); } public static function numeroEmInteiro(v:Number):String { var char:Array = String(Math.round(v)).split(""); var str:String = ""; char.reverse(); for (var i = char.length - 1; i >= 0; i--) { str += char[i]; if (i % 3 == 0 && i > 0) str += "."; } return str; } public static function numeroEmFracao(v:Number):String { var final:String; var val:String = String(v); var char:Array = val.split(".", 2); var esq:String = numeroEmInteiro(char[0]); var dir:String = char[1]; (dir.length < 2) ? dir += "0" : dir = dir.substr(0,3); (dir) ? final = esq + "," + dir : final = esq; return final; } } No fla faço assim: import Converte; var num:Number = 1000.01; trace(num); trace(Converte.numeroEmFracao(num)); Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Agosto 6, 2009 Aqui: Texto.text=Texto.text.replace(",","."); Você vai sempre subistituir qualquer virgula por ponto. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Matheusczr 0 Denunciar post Postado Agosto 6, 2009 Obrigado pela ajuda. Ainda não esá exatamente como quero, mas já resolve 90% do meu problema. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matheusczr 0 Denunciar post Postado Agosto 7, 2009 Achei esse link aqui: http://livedocs.adobe.com/apollo/1.0/aslr/mx/formatters/CurrencyFormatter.html isso é exatamente o que eu quero, será que alguem pode me explicar como implementa isso?? esse código deve ser adicionado no flash?? Tenho que baixar ou importar algum pacote? Vi que tem haver com xml, mas não sei nada do mesmo, preciso saber?? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago de Oliveira Cruz 21 Denunciar post Postado Agosto 7, 2009 Isso ai é código de flex E não flash Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Matheusczr 0 Denunciar post Postado Agosto 7, 2009 E não da pra usar junto? no final daquela página é em flash os campos. Já serve pra mim. Obrigado Isso ai é código de flex E não flash Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Matheusczr 0 Denunciar post Postado Agosto 10, 2009 Consegui resolver meu problema com essas duas classes: import Converte; //importa classe para //Mascara var campoFormatado:Mascara = new Mascara();//Importa função da classe campoFormatado.setMascara(LRP, "0.000,00");//campo, formato -> Ex.: R$ 0,00, CEP: 00000-000, Fone: (00)1234 1234, entre outros. //Resolvi assim a quesão das virgulas //Função para subsituir caracteres String.prototype.replace = function(text, replacetext) { return this.split(text).join(replacetext); }; if (LRP.text!="") { if (LRP.text!=0) { //Pega apenas o valor antes da virgula var LRP_:Array = LRP.text.split(".",2); //1.000,00 ->LRP_[0]=1; LRP_[1]=000,00 LRP.text = LRP_[0]+LRP_[1];//Une 10+000 -> LRP=10000 var LRP_2:Array = LRP.text.split(",",2);//000,00 -> LRP_2[0]=1000 LRP.text = Number(LRP_2[0]);//LRP=1000 } //Isso resolveu um problema onde falava zeros, por exemplo, era assim 14,3 e ficou assim 14,30 PA1.text=Converte.numeroEmFracao(PA1.text); class Mascara { public function setMascara(campo:Object, formato:String) { campo.restrict = "0-9"; campo.maxChars = formato.length; var char:Array = new Array(); for (var i:Number = 0; i<formato.length; i++) { if (formato.charAt(i) != 0) { char.push({intervalo:i, caractere:formato.charAt(i)}); } } // function checaMascara() { var n:Number = 0; var final:String = ""; var cleanStr:String = ""; // for (var i:Number = 0; i<campo.text.length; i++) { if (!isNaN(campo.text.substr(i, 1))) { cleanStr += campo.text.substr(i, 1); } } // for (var i:Number = 0; i<cleanStr.length; i++) { while (i+n == char[n].intervalo) { final += char[n].caractere; n++; } final += cleanStr.substr(i, 1); } campo.text = final; Selection.setSelection(campo.text.length, campo.text.length); } // if (typeof (campo) == "movieclip") { var mListener:Object = new Object(); campo.addEventListener("change", mListener); mListener.change = function() { checaMascara(); }; } else if (typeof (campo) == "object") { campo.onChanged = function() { checaMascara(); }; } } } class Converte { public static function textoEmNumero(v:String):Number { if (!isNaN(v)) var v:String = numeroEmFracao(Number(v)); var char:Array = [v.split(",")[0].split(""), v.split(",")[1].split("")]; var numeros:Array = [[],[]]; for (var i = 0; i < char.length; i++) { for (var j = 0; j < char[i].length; j++) if (!isNaN(char[i][j])) numeros[i].push(char[i][j]); } var esq:String = numeros[0].join(""); var dir:String = numeros[1].join(""); return Number(esq + "." + dir); } public static function numeroEmInteiro(v:Number):String { var char:Array = String(Math.round(v)).split(""); var str:String = ""; char.reverse(); for (var i = char.length - 1; i >= 0; i--) { str += char[i]; if (i % 3 == 0 && i > 0) str += "."; } return str; } public static function numeroEmFracao(v:Number):String { var final:String; var val:String = String(v); var char:Array = val.split(".", 2); var esq:String = numeroEmInteiro(char[0]); var dir:String = char[1]; (dir.length < 2) ? dir += "0" : dir = dir.substr(0,3); (dir) ? final = esq + "," + dir : final = esq; return final; } } Obrigado pela ajuda ai pessoal. Compartilhar este post Link para o post Compartilhar em outros sites