Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheusczr

[Resolvido] Mascara InputText e Arredondar Numero

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.