Oi Jackson, Seu problema é muito mais de lógica que de Flex. Analisando seu código eu vi que você tem dois parâmetros que vão entrar no cálculo. "altura" e "largura", o restante são os operadores matemáticos (+, -, / e *) e algum número para fazer parte da fórmula. O lance aqui é fazer a fórmula com parâmetros que você possa identificar facilmente. Por exemplo: Ao invés de ser assim: <formula>(Number(altura.text)*Number(largura.text)/2)</formula> Faça assim: <formula>(@altura@ * @largura@ / 2)</formula>
Dessa forma você pode procurar na string formula por uma substring que estiver entre os símbolos "@". Em Seguida procurar pelo símbolo matemático e assim vai até terminar a string. Você estará fazendo um parse nessa string analisando cada pedaço e identificando cada um deles. No final você vai ter a posição de cada parâmetro e dos símbolos matemáticos para fazer a conta. Sacou? Procure por Math String Parser "parse de expressões matemáticas" Rafael Franco Carvalho -----Original Message----- From: flexdev@googlegroups.com [mailto:flex...@googlegroups.com] On Behalf Of jacksondossan...@gmail.com Sent: Wednesday, November 25, 2009 10:48 AM To: flexdev Subject: [flexdev] String em expressão matemárica Olá, Estou iniciando em flex, e comecei a fazer uma calculadora que deve calcular a quantidade necessária para se utilizar um determinado produto. Parece algo simples mas não tenho ideia de como fazer. A calculadora funciona da seguinte maneira a pessoa escolhe um produto e este tem uma fórmula de calcular a quantidade que se utlilizará do produto. Bom eu estou guardando os produtos e suas formulas em um xml, só que o problema é que qdo eu carrego a formula ela me vem como um string e não efetua o calculo. Alguém saberia me dizer como devo proceder. Agradeço a colaboração Segue meu script inicial <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" initialize="carregaXML()"> <fx:Declarations> </fx:Declarations> <fx:Script source="operacoes.as"> </fx:Script> <fx:Script> <![CDATA[ private var meuXML:XML; private var loader:URLLoader; [Bindable] private var Produtos:Array = new Array(); private function carregaXML():void { loader=new URLLoader(); loader.addEventListener(Event.COMPLETE, onComplete); loader.load(new URLRequest("formulas.xml")); } private function onComplete(evt:Event):void { meuXML = new XML(loader.data); for(var i:int; i < meuXML..produto.length(); i++){ Produtos.push({label:meuXML..produto[i].nome}); } } private function calcular():void{ resultado.text = meuXML..produto[produto.selectedIndex].formula; } ]]> </fx:Script> <s:Label x="68" y="51" text="Altura:
" textAlign="left" /> <s:Label x="56" y="86" text="Largura:
" textAlign="left"/> <s:TextInput x="117" y="44" id="altura" text="10"/> <s:TextInput x="117" y="78" id="largura"/> <s:TextInput x="331" y="44" id="resultado"/> <s:Button x="175" y="118" label="Calcular" click="{calcular()}"/> <mx:ComboBox x="117" y="10" editable="true" id="produto" dataProvider="{Produtos}" prompt="Selecione" selectedIndex="-1" ></ mx:ComboBox> </s:Application> formulas.xml <?xml version="1.0" encoding="utf-8"?> <produtos> <produto> <nome>Produto 1</nome> <formula>(Number(altura.text)*Number(largura.text)*2)</formula> </produto> <produto> <nome>Produto 2</nome> <formula>(Number(altura.text)*Number(largura.text)/2)</formula> </produto> <produto> <nome>Produto 3</nome> <formula>(Number(altura.text)*Number(largura.text)+10)</formula> </produto> </produtos> --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com Para sair da lista, envie um email em branco para flexdev-unsubscr...@googlegroups.com Mais opções estão disponíveis em http://groups.google.com/group/flexdev -~----------~----~----~----~------~----~------~--~---