參考:用Objective-C實現(xiàn)簡單的數(shù)學(xué)字符串公式的計算
之前想改進一下 自動布局:JHAutoLayout中
UIView
.jhView()
.jh_addToView(self.view)
.jh_frame(@"[x:10,y:80,w:2_w(0)-15,h:110]")
.jh_bgColor(({
UIColor *color = [UIColor lightGrayColor];
color;
})).jh_tag(@(100));
里面
jh_frame(@"[x:10,y:80,w:2_w(0)-15,h:110]")
想用一個數(shù)學(xué)字符串公式來表示x,y,w,h.
于是網(wǎng)上搜索到了這個:用Objective-C實現(xiàn)簡單的數(shù)學(xué)字符串公式的計算
測試之后,發(fā)現(xiàn)還是會有一些小問題
然后就在它的基礎(chǔ)之上進行了改進:
1.負數(shù)的情況
2.兩個運算符在一起的情況(比如,加上一個負數(shù))
對比效果:
//計算結(jié)果1:改進之前
//計算結(jié)果2:改進之后
//計算結(jié)果3:直接的數(shù)學(xué)公式計算
第一種:OK
NSString *formula;
formula = @"300";
NSLog(@"計算結(jié)果1:%@",[FormulaStringCalcUtility calcComplexFormulaString:formula]);
NSLog(@"計算結(jié)果2:%@",[NSString jh_caculateStringFormula:formula]);
NSLog(@"計算結(jié)果3:%@",@([formula floatValue]));
/**<
計算結(jié)果1:300.00
計算結(jié)果2:300.00
計算結(jié)果3:300
*/
第二種:OK
formula = @"3*3+6/2";
NSLog(@"計算結(jié)果1:%@",[FormulaStringCalcUtility calcComplexFormulaString:formula]);
NSLog(@"計算結(jié)果2:%@",[NSString jh_caculateStringFormula:formula]);
NSLog(@"計算結(jié)果3:%@",@(3*3+6/2.0));
/**<
計算結(jié)果1:12.00
計算結(jié)果2:12.00
計算結(jié)果3:12
*/
第三種:OK
formula = @"(3+2*2+(1+2))*2-1*5+(5/10-10)";
NSLog(@"計算結(jié)果1:%@",[FormulaStringCalcUtility calcComplexFormulaString:formula]);
NSLog(@"計算結(jié)果2:%@",[NSString jh_caculateStringFormula:formula]);
NSLog(@"計算結(jié)果3:%@",@((3+2*2+(1+2))*2-1*5+(5/10.0-10)));
/**<
計算結(jié)果1:5.50
計算結(jié)果2:5.50
計算結(jié)果3:5.5
*/
第四種:OK
formula = @"-113+9/-3*5-20";
NSLog(@"計算結(jié)果1:%@",[FormulaStringCalcUtility calcComplexFormulaString:formula]);
NSLog(@"計算結(jié)果2:%@",[NSString jh_caculateStringFormula:formula]);
NSLog(@"計算結(jié)果3:%@",@(-113+9/(-3.0)*5-20));
/**<
計算結(jié)果1:148.00
計算結(jié)果2:148.00
計算結(jié)果3:148
*/
第五種:NOT OK
formula = @"-(1+(2-(3*(4.0/(5+6-8/2.0*4)))))";
NSLog(@"計算結(jié)果1:%@",[FormulaStringCalcUtility calcComplexFormulaString:formula]);
NSLog(@"計算結(jié)果2:%@",[NSString jh_caculateStringFormula:formula]);
NSLog(@"計算結(jié)果3:%@",@(-(1+(2-(3*(4.0/(5+6-8/2.0*4)))))));
/**<
計算結(jié)果1:1.80
計算結(jié)果2:5.40
計算結(jié)果3:5.4
*/
第六種:NOT OK
formula = @"-(1+(2-(3*(4/(5+6-7*8/9-(1+(2-(3*(4/(5+6-8/2*4))))))))))";
NSLog(@"計算結(jié)果1:%@",[FormulaStringCalcUtility calcComplexFormulaString:formula]);
NSLog(@"計算結(jié)果2:%@",[NSString jh_caculateStringFormula:formula]);
NSLog(@"計算結(jié)果3:%@",@(-(1+(2-(3*(4.0/(5+6-7*8.0/9.0-(1+(2-(3*(4.0/(5+6-8/2.0*4))))))))))));
/**<
計算結(jié)果1:-1.02
計算結(jié)果2:-22.285723
計算結(jié)果3:-22.28571428571427
*/
測的不全非凌,更復(fù)雜的估計,會有問題灶似。
github:文件