iOS客戶端手續(xù)費(fèi)計算方法并解決金額精度問題

需求:
1.客戶端模仿微信的提現(xiàn)功能诀浪,具體提現(xiàn)操作可以試玩一下你的微信提現(xiàn)操作磕昼;
2.提現(xiàn)涉及到手續(xù)費(fèi)的計算,客戶端計算的手續(xù)費(fèi)和后臺計算的手續(xù)費(fèi)要進(jìn)行對比钱雷,有點(diǎn)坑哈骂铁!
3.既然進(jìn)行對比,那就要設(shè)定規(guī)則標(biāo)準(zhǔn):

需要精確數(shù)值計算罩抗;
小數(shù)點(diǎn)后精確保留2位數(shù)字拉庵;
怎么舍去小數(shù)點(diǎn)2位后數(shù)字,小數(shù)點(diǎn)后兩位之后若有數(shù)字都需進(jìn)1(既然是提現(xiàn)套蒂,咋可不能吃虧呀钞支!),也就是只入不舍或者是無窮舍進(jìn)泣懊。

還有一些困難:用戶在UITextField輸入具體金額伸辟,我們拿到的數(shù)據(jù)也是NSString類型的金額,然后轉(zhuǎn)化成CGFloat類型的等等進(jìn)行計算馍刮,但是這樣計算出來的數(shù)據(jù)值就不準(zhǔn)確了信夫,所以第1條必須要保證精確數(shù)值計算。
沒辦法卡啰,就找了下資料静稻,找到了蘋果有專門的API,針對金融貨幣單位:
NSDecimalNumber --> 解決計算NSString類型精度問題
NSDecimalNumberHandler --> 解決上面的就算結(jié)果如何取舍以及需要保留的精度(小數(shù)點(diǎn)位數(shù))
希望可以解決有遇到同樣問題的人匈辱。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    tempStr1 = @"88";
    tempStr2 = @"0.2%";
    [self decimalNumberMutiplyWithString:tempStr1 with:tempStr2];
}

/**
 客戶端手續(xù)費(fèi)計算方法并解決金額精度問題
 參考博客:
 http://www.th7.cn/Program/IOS/201608/937405.shtml
 http://blog.csdn.net/yuwuchaio/article/details/50637942

 @param amountValue 用戶輸入的具體金額
 @param rateValue 后臺給予的費(fèi)率
 @return 客戶端計算出的手續(xù)費(fèi)
 */
-(NSString *)decimalNumberMutiplyWithString:(NSString *)amountValue with:(NSString *)rateValue{
    /*手續(xù)費(fèi)計算精度問題解決:NSDecimalNumber
     加減乘除:
     decimalNumberByAdding
     decimalNumberBySubtracting:
     decimalNumberByMultiplyingBy:
     decimalNumberByDividingBy:
     */
    NSDecimalNumber *rateValueNumber = [NSDecimalNumber decimalNumberWithString:rateValue];
    NSDecimalNumber *oneHundredValueNumber = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d", 100]];
    NSDecimalNumber *division = [rateValueNumber decimalNumberByDividingBy:oneHundredValueNumber];
    NSDecimalNumber *amountValueNumber = [NSDecimalNumber decimalNumberWithString:amountValue];
    NSDecimalNumber *product = [amountValueNumber decimalNumberByMultiplyingBy:division];
    NSLog(@"%@", [product stringValue]);
    /*四舍五入精確度問題解決:NSDecimalNumberHandler
     講述下參數(shù)的含義:
     RoundingMode: 簡單講就是你要四舍五入操作的標(biāo)準(zhǔn).
     枚舉
     NSRoundPlain,   //Round up on a tie //貌似取整 
     NSRoundDown,    //Always down == truncate  //只舍不入
     NSRoundUp,      // Always up    //只入不舍
     NSRoundBankers  // on a tie round so last digit is even  貌似四舍五入
     scale : 需要保留的精度振湾。
     raiseOnExactness : 為YES時在處理精確時如果有錯誤,就會拋出異常亡脸。
     raiseOnOverflow  : YES時在計算精度向上溢出時會拋出異常押搪,否則返回树酪。
     raiseOnUnderflow : YES時在計算精度向下溢出時會拋出異常,否則返回.
     raiseOnDivideByZero : YES時大州。當(dāng)除以0時會拋出異常续语,否則返回。
     */
    NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundUp scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
    NSString *tempStr =[[product decimalNumberByRoundingAccordingToBehavior:roundingBehavior] stringValue];
    NSLog(@"%@",tempStr);
    return tempStr;
}

暫時說到這里厦画,后續(xù)也會持續(xù)更新優(yōu)化疮茄,若有問題歡迎留言,共同探討8睢Aκ浴!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末排嫌,一起剝皮案震驚了整個濱河市畸裳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淳地,老刑警劉巖躯畴,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異薇芝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丰嘉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門夯到,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饮亏,你說我怎么就攤上這事耍贾。” “怎么了路幸?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵荐开,是天一觀的道長。 經(jīng)常有香客問我简肴,道長晃听,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任砰识,我火速辦了婚禮能扒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辫狼。我一直安慰自己初斑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布膨处。 她就那樣靜靜地躺著见秤,像睡著了一般砂竖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹃答,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天乎澄,我揣著相機(jī)與錄音,去河邊找鬼挣跋。 笑死三圆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的避咆。 我是一名探鬼主播舟肉,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼查库!你這毒婦竟也來了路媚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤樊销,失蹤者是張志新(化名)和其女友劉穎整慎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體围苫,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裤园,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剂府。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拧揽。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腺占,靈堂內(nèi)的尸體忽然破棺而出淤袜,到底是詐尸還是另有隱情,我是刑警寧澤衰伯,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布铡羡,位于F島的核電站,受9級特大地震影響意鲸,放射性物質(zhì)發(fā)生泄漏烦周。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一怎顾、第九天 我趴在偏房一處隱蔽的房頂上張望论矾。 院中可真熱鬧,春花似錦杆勇、人聲如沸贪壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闰靴。三九已至彪笼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚂且,已是汗流浹背配猫。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杏死,地道東北人泵肄。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像淑翼,于是被迫代替她去往敵國和親腐巢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

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