關(guān)于數(shù)學(xué)字符串公式的計算

參考:用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:文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谤祖,更是在濱河造成了極大的恐慌闪彼,老刑警劉巖甜孤,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畏腕,居然都是意外死亡缴川,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門描馅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來把夸,“玉大人,你說我怎么就攤上這事铭污≡矗” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵况凉,是天一觀的道長谚鄙。 經(jīng)常有香客問我,道長刁绒,這世上最難降的妖魔是什么闷营? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮知市,結(jié)果婚禮上傻盟,老公的妹妹穿的比我還像新娘。我一直安慰自己嫂丙,他們只是感情好娘赴,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跟啤,像睡著了一般诽表。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隅肥,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天竿奏,我揣著相機與錄音,去河邊找鬼腥放。 笑死泛啸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秃症。 我是一名探鬼主播候址,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼吕粹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岗仑?” 一聲冷哼從身側(cè)響起匹耕,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赔蒲,沒想到半個月后泌神,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡舞虱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年欢际,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矾兜。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡损趋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椅寺,到底是詐尸還是另有隱情浑槽,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布返帕,位于F島的核電站桐玻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荆萤。R本人自食惡果不足惜镊靴,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望链韭。 院中可真熱鬧偏竟,春花似錦、人聲如沸敞峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旋讹。三九已至殖蚕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骗村,已是汗流浹背嫌褪。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胚股,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓裙秋,卻偏偏與公主長得像琅拌,于是被迫代替她去往敵國和親缨伊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于 Swift 重要這個文檔所包含的準備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的进宝。這個信息可能會改變, 根據(jù)這個文...
    無灃閱讀 4,283評論 1 27
  • 字符的 Unicode 表示法 codePointAt() String.fromCodePoint() 字符串的...
    卞卞村長L閱讀 745評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法刻坊,類相關(guān)的語法,內(nèi)部類的語法党晋,繼承相關(guān)的語法谭胚,異常的語法,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 3 弱起小節(jié) 樂曲由拍子的弱部分(弱拍或后半拍)開始旁趟,叫做“弱起樂曲”或“弱起”。弱起樂曲的第一個小節(jié)線之前的部分...
    樂度音樂閱讀 4,668評論 0 2
  • 『三』 爹爹讓自己面壁的第二天庇绽,籬笑實在忍無可忍锡搜。趁著大半夜,所有人都熟睡之時瞧掺,腳墊上從花園搬來的石凳輕而易舉...
    梔子心閱讀 412評論 0 2