使用ActionScript计算数学公式字符串

4
我应该如何使用AS3计算数学公式? 并不需要特别复杂的方式,例如(10/3)*4+10。 谢谢。
3个回答

9

虽然你可以使用像D.evalAS3Eval这样的大型eval库,但你实际上只需要像这个简单的MathParser有关MathParser的更多信息)一样的东西。

这是如何使用MathParser:

package {
    import bkde.as3.parsers.*;
    import flash.display.Sprite;
    public class MathTest extends Sprite {
        public function MathTest() {
            var parser:MathParser = new MathParser([]);
            var compiledObj:CompiledObject = parser.doCompile("(10/3)*4+10");
            var answer:Number = parser.doEval(compiledObj.PolishArray, []);

            // EDIT: In case you wanted variables
            var xyParser:MathParser = new MathParser(["x", "y"]);
            var xyCompiledObj:CompiledObject = xyParser.doCompile("(x/3)*y+10");
            var xyAnswer:Number = xyParser.doEval(xyCompiledObj.PolishArray, [10, 4]);
        }

    }

}

ActionScript 3 不再原生支持 eval 函数,你所建议的可能只适用于 ActionScript 2。 - Tianzhen Lin
1
即使在AS2中也不会起作用。Eval只能用于访问对象的参数 - 它是无用的。 - Jonatan Hedborg
1
完全重新制作。我在第一次回答时使用了一个旧的、显然不正确的参考资料。希望您能重新考虑下降的票数(如果您打算继续保持下降,请告诉我我可以做些什么来提供更好的答案)。 - Patrick

4

1
如果您想避免使用库,可以尝试使用ExternalInterface.call来访问Javascript的eval函数。
例如:
var formula:String = '1+1';
var result:* = ExternalInterface.call('eval', formula);

您可能希望检查一下 result == 'undefined',因为这表示公式语法出现错误。

应用程序不能在浏览器窗口中运行,这样还能正常工作吗? - Francisc
1
老实说,我不确定——除了浏览器之外,我没有太多的AS3经验。在这种情况下,您最好使用第三方库。它将在哪里运行? - jalbee
在桌面上。不确定我能否在那里使用JS,尽管它有一个捆绑的WebKit分发版。 - Francisc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接