发布网友 发布时间:2022-04-23 02:46
共4个回答
热心网友 时间:2022-04-23 21:34
自己写的一个类:CalculateClass
package {
public class CalculateClass {
public function CalculateClass() {
}
public static function calculateString(str:String=""):Number {
if (str=="") {
return NaN;
}
return calculateFun(str);
}
//检测括号
private static function calculateFun(str:String):Number{
var index:Number = str.lastIndexOf("(");
if(index==-1){
return calculateAdd(str);
}
var new_str:String = str.substr(index+1);
var end_index:Number = new_str.indexOf(")");
var child_str:String = new_str.substr(0,end_index);
str = str.substr(0,index)+calculateFun(child_str)+new_str.substr(end_index+1);
return calculateFun(str);
}
//计算加法
private static function calculateAdd(str:String):Number{
var add_arr:Array = str.split("+");
var len:Number = add_arr.length;
var result:Number = 0;
for(var i:Number=0;i<len;i++){
if(!Number(add_arr[i]) && Number(add_arr[i])!=0){
add_arr[i] = calculateDes(String(add_arr[i]));
}
if(i==0){
result = Number(add_arr[i]);
}else{
result += Number(add_arr[i]);
}
}
return result;
}
//计算减法
private static function calculateDes(str:String):Number{
var des_arr:Array = str.split("-");
var d_len:Number = des_arr.length;
var result:Number = 0;
for(var i:Number=0;i<d_len;i++){
if(!Number(des_arr[i]) && Number(des_arr[i])!=0){
des_arr[i] = calculateMul(String(des_arr[i]));
}
if(i==0){
result = Number(des_arr[i]);
}else{
result -= Number(des_arr[i]);
}
}
return result;
}
//计算乘法
private static function calculateMul(str:String):Number{
var mul_arr:Array = str.split("*");
var m_len:Number = mul_arr.length;
var result:Number = 0;
for(var i:Number=0;i<m_len;i++){
if(!Number(mul_arr[i]) && Number(mul_arr[i])!=0){
mul_arr[i] = calculateExc(String(mul_arr[i]));
}
if(i==0){
result = Number(mul_arr[i]);
}else{
result *= Number(mul_arr[i]);
}
}
return result;
}
//计算除法
private static function calculateExc(str:String):Number{
var exc_arr:Array = str.split("/");
var result:Number = Number(exc_arr[0]);
var e_len:Number = exc_arr.length;
for(var i:Number=1;i<e_len;i++){
result=result/Number(exc_arr[i]);
}
return result;
}
}
}
例子在图片中,获取方法:点击图片,大图显示之后将图片另存为,之后将后辍改成.rar解压出来即可
热心网友 时间:2022-04-23 22:52
这个很复杂的,首先你要把这个字符串中的运算符和数字分析出来,然后再还原算式,才能计算出结果,Number(str)这样操作只能是针对单个字符才可以。热心网友 时间:2022-04-24 00:26
你前面的a是字符串,trace(a)的结果应该是 1+1,trace(b)的话为NaN,要想他等于2的话,那就对a做分析了,如把a按照+来分组,再做计算。热心网友 时间:2022-04-24 02:18
当一个string转换成Number类型时,如果是都是数值时,直接转换成数值型,如果是其他的则输出NaN(not a number) , 拿你的这个例子来说 ,因为字符串中第二个字符是 '+' ,电脑按规矩办事,不会帮你执行加法的, 所以说是NaN 。多用熟悉几次。