Bueno, no se si se entienda?, es una clase que sirve para validar los input text, solo que acepte digitos con decimales, no se si fue creada o la copiaron de algun lado, yo la encontre tal cual. Cuando la llamo desde la scena princial, funciona correctamente.
Código :
class OnlyNumbers{
function OnlyNumbers(){
}
public function Alive() :String{
return "I´m Alive!";
}
public function ControlNumber(nomeCampo:String, nomeBackup:String, numeroCasasPermitidas:Number){
/*
Para usar esta função é necessário dar nome a variavel de input text (nomeCampo),
criar uma variavel string no root (nomeBackup)
e um movie clip com o codigo:
onClipEvent(keyUp){
c = new testex();
c.f1("resposta", "backupresposta", 1);
}
Para usar o numero armazenado no string pode-se usar
o metodo String2Number
Esta função a cada tecla apertada, verifica se foi digitado
um caracter que não representa um número,
e alem disso controla o numeros de casas decimais do numero.
*/
var i:Number;
var respostasize:Number;
respostasize = _root[nomeCampo].length;
var numero:Boolean;
var numeroVirgulas:Number;
var posicaoVirgula:Number;
var a:String;
a = _root[nomeCampo];
// Verifica se o numero é composto apenas por digitos e virgula
numero = true;
numeroVirgulas = 0;
posicaoVirgula = -1;
for(i=0; i<respostasize; i++){
if( (a.charAt(i) != '0') && (a.charAt(i) != '1') && (a.charAt(i) != '2') && (a.charAt(i) != '3') && (a.charAt(i) != '4') && (a.charAt(i) != '5') && (a.charAt(i) != '6') && (a.charAt(i) != '7') && (a.charAt(i) != '8') && (a.charAt(i) != '9') && (a.charAt(i) != ',') ){
numero = false;
}
// Conta o numero de virgulas existentes
if(a.charAt(i) == ','){ // Procura por virgulas
numeroVirgulas++;
// Marca a posicao da primeira virgula encontrada
if(posicaoVirgula == -1){
posicaoVirgula = i;
}
}
}
// Verifica se existe apenas uma ou nenhuma virgula
if(numeroVirgulas > 1){
numero = false;
}
// Se foi inserido um numero valido faz um backup desse numero
if(numero){
// Verifica o numero de casas decimais e restringe-as
respostasize = _root[nomeCampo].length;
//trace("size = " + respostasize + "posV = " + posicaoVirgula);
if (numeroVirgulas == 1){
if (respostasize-1 > (posicaoVirgula + numeroCasasPermitidas) ){
_root[nomeCampo] = _root[nomeCampo].substr(0, (posicaoVirgula+numeroCasasPermitidas+1));
}
}
//Faz backup do numero
_root[nomeBackup] = _root[nomeCampo];
}
// Se o numero inserido for invalido recupera o ultimo numero valido
else{
_root[nomeCampo] = _root[nomeBackup];
}
}
public function String2Number(nomeVariavel:String) :Number{
/* Esta funcao pega uma variavel do tipo String no root
com nome = nomeVariavel e com formado por digitos e virgula
e converte-a para um numero (formato de digitos e ponto) */
var i:Number;
var j:Number;
var valorComPonto:String; // Guarda uma copia da variavel mas troca virgula por ponto
var valor:Number; // Guarda o valorComPonto em numero
var respostasize:Number;
respostasize = _root[nomeVariavel].length;
var numero:Boolean;
var numeroVirgulas:Number;
var posicaoVirgula:Number;
var a:String;
a = _root[nomeVariavel];
// Verifica se o numero é composto apenas por digitos e virgula
numero = true;
numeroVirgulas = 0;
posicaoVirgula = -1;
for(i=0; i<respostasize; i++){
if( (a.charAt(i) != '0') && (a.charAt(i) != '1') && (a.charAt(i) != '2') && (a.charAt(i) != '3') && (a.charAt(i) != '4') && (a.charAt(i) != '5') && (a.charAt(i) != '6') && (a.charAt(i) != '7') && (a.charAt(i) != '8') && (a.charAt(i) != '9') && (a.charAt(i) != ',') ){
numero = false;
}
// Conta o numero de virgulas existentes
if(a.charAt(i) == ','){ // Procura por virgulas
numeroVirgulas++;
}
}
// Verifica se existe apenas uma ou nenhuma virgula
if(numeroVirgulas > 1){
numero = false;
}
// Se foi inserido um numero valido faz um backup desse numero
if(numero){
// Verifica o numero de casas decimais e restringe-as
respostasize = _root[nomeVariavel].length;
// Faz uma copia do valor trocando a virgula por ponto
valorComPonto = "";
for(j=0; j<respostasize; j++){
if(_root[nomeVariavel].charAt(j) != ','){
valorComPonto += _root[nomeVariavel].charAt(j);
}
else{
valorComPonto += '.';
}
}
// Transforma para numero
valor = Number(valorComPonto);
//trace("valor = " + valor);
}
return (valor);
}
public function String2NumberD(valorDireto:String) :Number{
/* Esta funcao pega uma variavel do tipo String no root
com nome = nomeVariavel e com formado por digitos e virgula
e converte-a para um numero (formato de digitos e ponto) */
var i:Number;
var j:Number;
var valorComPonto:String; // Guarda uma copia da variavel mas troca virgula por ponto
var valor:Number; // Guarda o valorComPonto em numero
var respostasize:Number;
respostasize = valorDireto.length;
var numero:Boolean;
var numeroVirgulas:Number;
var posicaoVirgula:Number;
var a:String;
a = valorDireto;
// Verifica se o numero é composto apenas por digitos e virgula
numero = true;
numeroVirgulas = 0;
posicaoVirgula = -1;
for(i=0; i<respostasize; i++){
if( (a.charAt(i) != '0') && (a.charAt(i) != '1') && (a.charAt(i) != '2') && (a.charAt(i) != '3') && (a.charAt(i) != '4') && (a.charAt(i) != '5') && (a.charAt(i) != '6') && (a.charAt(i) != '7') && (a.charAt(i) != '8') && (a.charAt(i) != '9') && (a.charAt(i) != ',') ){
numero = false;
}
// Conta o numero de virgulas existentes
if(a.charAt(i) == ','){ // Procura por virgulas
numeroVirgulas++;
}
}
// Verifica se existe apenas uma ou nenhuma virgula
if(numeroVirgulas > 1){
numero = false;
}
// Se foi inserido um numero valido faz um backup desse numero
if(numero){
// Verifica o numero de casas decimais e restringe-as
respostasize = valorDireto.length;
// Faz uma copia do valor trocando a virgula por ponto
valorComPonto = "";
for(j=0; j<respostasize; j++){
if(valorDireto.charAt(j) != ','){
valorComPonto += valorDireto.charAt(j);
}
else{
valorComPonto += '.';
}
}
// Transforma para numero
valor = Number(valorComPonto);
//trace("valor = " + valor);
}
return (valor);
}
function Number2String(valor:Number) :String{
/* esta funcao pega um numero e transforma-o num string
substituindo o ponto pela virgula
*/
var posPonto:Number;
var valorString:String;
var i:Number;
var resposta:String;
valorString = valor.toString();
posPonto = -1;
// Percorre o string com o valor e determina a posicao do ponto se houver
// caso nao haja posPonto fica com -1
for(i=0; i<valorString.length; i++){
if (valorString.charAt(i) == "."){
posPonto = i;
}
}
// Se houver ponto substitui por virgula
if (posPonto != -1){
resposta = valorString.substr(0, posPonto);
resposta = resposta + ",";
resposta = resposta + (valorString.substring(posPonto+1, valorString.length+1));
}
else{
resposta = valorString;
}
return resposta;
}
function Arredonda(valor:Number, numCasasDecimais:Number) :Number{
var auxString:String;
var respostaString:String;
var resposta;
var posVirgula:Number;
var i:Number;
posVirgula = -1;
auxString = Number2String(valor);
// Percorre o string aux em busca de uma virgula
for(i=0; i<auxString.length; i++){
if (auxString.charAt(i) == ","){
posVirgula = i;
}
}
// Se houver virgula, limita em numCasasDedimais casas decimais
// Copia o resultado para respostaString
if (posVirgula != -1){
// Se houver mais de numCasasDedimais casas decimais
if (auxString.length > posVirgula+numCasasDecimais){
respostaString = auxString.substring(0, posVirgula+numCasasDecimais+1);
}
else{
respostaString = auxString;
}
}
else{
respostaString = auxString;
}
// Transforma o string em numero
resposta = String2NumberD(respostaString);
// Arredonda a resposta
// Se houver virgula e se houver mais casas decimais do que permitido
if ( (posVirgula != -1) && (auxString.length > posVirgula+numCasasDecimais) ){
// Se o numero for terminado em 5, 6, 7, 8 ou 9 arredonda para cima
if((auxString.charAt(posVirgula+numCasasDecimais+1) == "5") || (auxString.charAt(posVirgula+numCasasDecimais) == "6") || (auxString.charAt(posVirgula+numCasasDecimais) == "7") || (auxString.charAt(posVirgula+numCasasDecimais) == "8") || (auxString.charAt(posVirgula+numCasasDecimais) == "9")){
resposta = resposta + Math.pow(10, -numCasasDecimais);
}
}
return resposta;
}
}