iOS金額輸入控制及金額精確計算

在APP設(shè)計中贪婉,貨幣金額計算經(jīng)常用到,但經(jīng)常會遇到四舍五入問題卢肃,比如在輸入框中輸入99999999.99的時候疲迂,在計算和之后,得到的值不匹配莫湘,比如99999999.99 * 2 = 2000000000.00這樣的問題尤蒿。

通常做法如下:

   NSString *count = 2;// 物品數(shù)量
   NSString *price = @"999999999.99"; // 物品單價
   NSString *singleTotlePrice = [NSString stringWithFormat:@"%.2f", (double)[price doubleValue]];
  double total = [count doubleValue] * [singleTotlePrice doubleValue];
  NSLog(@"%.2f",total); // 保留兩位  199999999.98
  singleTotalPriceTextLab.text = [NSString stringWithFormat:@"小計(元):¥%.2lf",total];
輸入控制部分,比如輸入小數(shù)點前8位逊脯,小數(shù)點后2位优质,只需在UITextField的代理方法中調(diào)用工具方法即可,實現(xiàn)如下:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  {
         // 實際付款金額位數(shù)限制,小數(shù)點前是 8為整數(shù)巩螃,小數(shù)點后2位
         return [DCFCustomExtra limitPayMoneyDot:textField shouldChangeCharactersInRange:range replacementString:string dotPreBits:8 dotAfterBits:2];
  }

 /**
 *  付款金額限制代碼
 *
 *  @param textField    當(dāng)前textField
 *  @param range        range
 *  @param string       string
 *  @param dotPreBits   小數(shù)點前整數(shù)位數(shù)
 *  @param dotAfterBits 小數(shù)點后位數(shù)
 *
 *  @return shouldChangeCharactersInRange 代理方法中 可以限制金額格式
 */

+ (BOOL) limitPayMoneyDot:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string dotPreBits:(int)dotPreBits dotAfterBits:(int)dotAfterBits

{
    if ([string isEqualToString:@"\n"]||[string isEqualToString:@""])
    { //按下return
        return YES;
    }

     NSCharacterSet *cs;
     NSUInteger nDotLoc = [textField.text rangeOfString:@"."].location;
     if (NSNotFound == nDotLoc && 0 != range.location)
     {
         cs = [[NSCharacterSet characterSetWithCharactersInString:myNumbers]invertedSet];
         if ([string isEqualToString:@"."])
         {
             return YES;
         }
         if (textField.text.length >= dotPreBits)
         {  //小數(shù)點前面6位
            // [textField resignFirstResponder];
             [DCFStringUtil showNotice:[NSString stringWithFormat:@"只允許小數(shù)前%d位", dotPreBits]];
              return NO;
          }
       }
        else
       {
            cs = [[NSCharacterSet characterSetWithCharactersInString:myDotNumbers]invertedSet];
            if (textField.text.length >= dotPreBits + dotAfterBits + 1)
            {
                  [textField resignFirstResponder];
                   [DCFStringUtil showNotice:[NSString stringWithFormat:@"只允許小數(shù)點后%d位", dotAfterBits]];
                   return  NO;
            }
       }
       NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
       BOOL basicTest = [string isEqualToString:filtered];
       if (!basicTest)
       {
           [textField resignFirstResponder];
           [DCFStringUtil showNotice:[NSString stringWithFormat:@"只允許小數(shù)點后%d位", dotAfterBits]];
            return NO;
        }
       if (NSNotFound != nDotLoc && range.location > nDotLoc +2)
       {  //小數(shù)點后面兩位
             [textField resignFirstResponder];
             [DCFStringUtil showNotice:[NSString stringWithFormat:@"只允許小數(shù)點后%d位", dotAfterBits]];
             return NO;
        }
    return YES;
}

本文已在版權(quán)印備案演怎,如需轉(zhuǎn)載請在版權(quán)印獲取授權(quán)。
獲取版權(quán)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末避乏,一起剝皮案震驚了整個濱河市爷耀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拍皮,老刑警劉巖歹叮,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铆帽,居然都是意外死亡咆耿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門爹橱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萨螺,“玉大人,你說我怎么就攤上這事愧驱∥考迹” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵组砚,是天一觀的道長吻商。 經(jīng)常有香客問我,道長糟红,這世上最難降的妖魔是什么艾帐? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮改化,結(jié)果婚禮上掩蛤,老公的妹妹穿的比我還像新娘。我一直安慰自己陈肛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布兄裂。 她就那樣靜靜地躺著句旱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晰奖。 梳的紋絲不亂的頭發(fā)上谈撒,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音匾南,去河邊找鬼啃匿。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溯乒。 我是一名探鬼主播夹厌,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裆悄!你這毒婦竟也來了矛纹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤光稼,失蹤者是張志新(化名)和其女友劉穎或南,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艾君,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡采够,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冰垄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬癌。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖播演,靈堂內(nèi)的尸體忽然破棺而出冀瓦,到底是詐尸還是另有隱情,我是刑警寧澤写烤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布翼闽,位于F島的核電站,受9級特大地震影響洲炊,放射性物質(zhì)發(fā)生泄漏感局。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一暂衡、第九天 我趴在偏房一處隱蔽的房頂上張望询微。 院中可真熱鬧,春花似錦狂巢、人聲如沸撑毛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藻雌。三九已至,卻和暖如春斩个,著一層夾襖步出監(jiān)牢的瞬間胯杭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工受啥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留做个,地道東北人鸽心。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像居暖,于是被迫代替她去往敵國和親顽频。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 27,070評論 5 19
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,324評論 25 707
  • 家里沒有拆遷之前膝但,有一個很大的院子冲九。我也是在失去了這個院子之后才意識到有個院子是件多么美好的事情。 爸爸會在院子里...
    abigsmile閱讀 225評論 0 0
  • 在你的房子里跟束,住著一個你看不到的你莺奸,你們永遠也不會相遇。但那個你就在你身邊冀宴,你們的命運可以自由發(fā)展灭贷,除了唯一一條準...
    薛志軒閱讀 200評論 0 0
  • xcode版本升級到8已經(jīng)很久了甚疟,很多像我一樣的新手怕把自己的xcode版本升級到8。 其實升級到xcode8要兼...
    iOS_開發(fā)閱讀 868評論 0 0