Conheça o Plugfeed | » Início » Desenvolvimento » Flash » Trabalhando com preços no flash
Conheça o Plugfeed | » Início » Desenvolvimento » Flash » Trabalhando com preços no flash -->
 
Avaliação: | Publicado em: 22/12/2006
Trabalhando com preços no flash
André Ponce Webdeveloper, conhecimentos em actionscript, php, sql, java, rails, ajax, entre outros. Interesses em programação para jogos e simulação de fisicas.
Trabalhando com preços no flash

Algumas linguagens de programação reconhecem numeros com casas decimais separadas por ‘.’(ponto) e, ou ‘,’(vírgula).

         O PHP por exemplo tem a opção de separar casas de milhar por ponto, e números abaixo de 1 por virgula (10.857,78). É este formato que vamos tratar.

         Como o flash reconhece este formato como uma string, vamos criar uma classe com 2 métodos, um que converte para numero, no qual poderemos realizar cálculos dentro do flash, e outro que converte no formato de preço, que será uma string, portanto não podemos realizar cálculos quando estiver neste formato.

Se você for trabalhar com uma loja virtual ou algo do gênero esta classe será útil.


Veja o código:

- Converte.as

class Converte{

            /**

                        Método que converte String em numero
                        @usage        
                       
@param           valor 
                       
@return           Retorna um numero

             */           

            static public function convertePonto(valor:String):Number{

                       //separa o valor recebido em um array
                        var separa:Array = valor.split("");
                        //inicializa numero como uma string vazia
                        var numero:String = "";                       

                        //varre o array, revome os pontos existentes, e substitui as virgulas por ponto
                       
for(var i=0; i<separa.length; i++){

                                   if(separa[i]=="."){

                                               continue;

                                   }else if(separa[i]==","){

                                               separa[i] = ".";

                                   }

                                   numero += separa[i];

                        }

                        //converte a string em numero, e retorna este numero
                        return Number(numero);

            }

           /**

                        Método que converte Numero em String        
                       
@usage        
                       
@param           valor
                        @return           Retorna uma String

             */         

            static public function converteVirgula(valor:Number):String{

                       
//Converte o numero em string, e separa seus caracteres e

                        //adciona em cada posição de um array
                       
var separa:Array = String(valor).split("");
                       
var valor_string:String;
                        //inicializa variaveis que serao usadas mais a frente
                        var posicao:Number;
                        var valor_d:String;
                        var valor_e:String;                       

                        //substitue o ponto por virgula
                       
for(var i=0; i<separa.length; i++){

                                   if(separa[i]=="."){

                                               separa[i] = ",";

                                   }

                        }                       

                        //converte o array em uma string
                        valor_string = separa.join("");
                        //pega a posição da virgula
                        posicao = valor_string.lastIndexOf(",");                       

                        //se o valor da posição for diferente de -1, vamo separar a string e 2 partes,
                        //antes da virgula, e depois da virgula
                        //caso contário, o valor_d recebe tudo, e o valor_e nao recebe nada

                        if(posicao!=-1){

                                   valor_d = valor_string.substr(0, posicao);

                                   valor_e = valor_string.substr(posicao);

                        }else{

                                   valor_d = valor_string;

                                   valor_e = "";

                        }                       

                        //vamos inicar a variavel valor_string como uma string vazia
                        separa = valor_d.split("");
                        valor_string = "";

                       

                        //agora vamos tratar do lado direito
                        //aqui vamos contar quantos numeros tem de traz para frente, e a cada 3 numeros
                        //adcionaremos um ponto representando uma casa decimal

                        for(var i=valor_d.length-1; i>=0; i--){

                                   valor_string += separa[i];                                  

                                   if((valor_d.length-i)%3==0){

                                               valor_string += ".";

                                   }

                        }
                       

                        //os pontos foram adcionados, agora precisamos inverte-lo, pois estao
                        //de traz para frente
                        //separamos a string em um array
                        separa = valor_string.split("");
                        //invertemos o array
                        separa.reverse();
                        //juntamos o array em uma string
                        valor_string = separa.join("");

                        //este if corrige um pequeno bug, se 6 numeros por exemplo
                        //ele adcionaria um '.' no inicio, portanto se for detectado este ponto, vamos remove-lo

                        if(separa[0]=="."){

                                   valor_string = valor_string.slice(1);

                        }                     

                        //terminamos de tratar o lado direito, agora vamos juntar com o lado esquerdo
                        valor_string = valor_string + valor_e;                       

                        //se nao houver casas abaixo de zero, ou seja, se o lado esquerdo estiver vazio,
                        //adcionamos ',00'

                        if(valor_string.lastIndexOf(",")==-1){

                                   valor_string += ",00";

                        }                       

                        //retornamos o valor
                        return valor_string;

            }

}


Usando

- Crie um novo arquivo na mesma pasta da classe

import Converte;

var num1:Number = Converte.convertePonto("10.857,78")*23.7;
var num2:String = Converte.converteVirgula(num1);
 
trace(num1);
trace(num2);

 

Espero que seja útil.

Abraço!
Arquivos anexos ao artigo

Jonas Keunecke <jonas@criar.arq.br>
Olá Andre
Gostei do script e já utilizei, eu não sou programador mas faço pequenas ferramentas que me ajudam no dia a dia. Mas tenho uma observação. Ao fazer cálculos o script altera o número de casas decimais após a virgula.
Você poderia ensinar a fazer Entrada de Site em Flash ?

Mto bom seu tutorial ;)
Vinicius Pinto <vinicius.designer@gmail.com>
ANIMAL PARABÉNS, eu vou fazer uma modificação no código para adiciona 0 depois da virgula quando o numero for sozinho, exemplo 1221.4 vai ficar 1221.40, é por questão de estética.

abs

www.viniciuspinto.com.br
Gostei bastante do script. Inteligente e fácil de entender. Me ajudou a resolver um pepino que estava tendo com valores numéricos e strings.

Valeu!!








Um produto Detetive.net