VB运算的优先级问题
VB问题:已知算术运算时的优先顺序“^、*、/、+、-”,在声明定义后,用“spt.Eval(Text1.Text)”,可进行算术运算;问题是:VB没有平方、开方√的功能...
VB问题:已知算术运算时的优先顺序“^、*、/、+、-”,在声明定义后,用“spt.Eval(Text1.Text)”,可进行算术运算;问题是:VB没有平方、开方√的功能,所有的平方、开方均用次方“^”表示,如果这样遇到平方、开方、次方的组合算式,按先后顺序计算就会有问题;因为算术计算的优先顺序是:平方、开方√、次方 ^,即这三种“方”存在优先等级,并非按组合顺序计算;例如:标准5^2立方=390625,如按顺序计算5^2^3=15625错误,遇到此问题用括号解决,5^(2^3)=390625;又如:标准√2平方^3平方=512,如按顺序计算2^2^3^2^0.5=64错误,也只能用括号解决(2^2)^(3^2)^0.5=512。虽然添加括号、能确保标准运算,但括号位置不对、则运算结果会出错;所以不知是否能通过、定义声明变通等分式,来解决这三种“方”的优先级问题;这可能是VB的一个难题,不知各位大师是否有高招?意解此题!(注:由于文字不能显示平方的符号,现有文字替换平方或立方,以此更正再次重发),谢谢。
展开
2个回答
展开全部
没太明白你的意思,Eval函数是利用Vbs来解析表达式,但也仅限表达式,我此前在vb.net中调用vbs的Eval函数,无法识别函数,只能进行表达式识别,用replace函数取代自变量X可以实现普通表达式的函数表达,但你所提到的问题和我说的是两码事,你是想通过某种方法来定义运算符的优先级?首先必要性不大,平方与开方本质上就是次方的特殊形势,为什么要实现这个功能呢?我不太理解。据我所知你如果要定义自己的运算符,在vb6.0中是无法直接实现的,就连在.net中也只能对已有的部分运算符进行重载,你要自定义运算符,只能以函数的形式调用,函数调用的优先级比运算符要高,但是据我测试eval函数解析不了函数,不知道vb6.0是否可以
追问
首先谢谢你费心了;要想区分平方、开方、次方优先顺序,的确很难,但这类组合算式常见,通常加括号可区分运算顺序,就是麻烦;如果像乘除加减那样,来运算平方、开方、次方组合式,就方便多了,三种的平方级最高,而次方最低;但VB均按次方(即:乘方或幂)的方式,进行先后顺序运算,当最高级平方排列在后面时,运算结果就会出错;所以设想来区分优先级的问题,现在看来无法实现;但谢谢热心的大师和网民。
追答
高级语言的运算符是底层编码,我虽不了解其原理,但可以根据计算机原理的反码补码运算,推测运算符的代码涉及到堆栈以及内存的运算,目前还没有听说哪种高级语言可以改动基础的运算符,.net中的运算符重载只能对已有的运算符,还不是全部运算符,进行重新定义,但优先级是不变的,举个例子,我自己创建了一个矩阵类型,可以进行各类矩阵运算并返回新矩阵,这里矩阵也有乘法,加法以及减法运算,但原有运算符只支持单个数值计算,这里就需要自定义运算符,让它可以涵盖矩阵。也许有高人知道怎么实现你的想法,但应该比较复杂,可能要做插件。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询