iOS開發(fā)中浮點型數(shù)據(jù)的四舍五入

方法一

    CGFloat fl1 = 1.23;
    CGFloat fl2 = 1.34;
    CGFloat fl3 = 1.35;
    CGFloat fl4 = 1.36;
    CGFloat fl5 = 1.44;
    CGFloat fl6 = 1.45;
    CGFloat fl7 = 1.46;
    
    NSLog(@"fl1 = %.1f, fl2 = %.1f, fl3 = %.1f, fl4 = %.1f, fl5 = %.1f, fl6 = %.1f, fl7 = %.1f",fl1,fl2,fl3,fl4,fl5,fl6,fl7);

打印結(jié)果:
fl1 = 1.2, fl2 = 1.3, fl3 = 1.4, fl4 = 1.4, fl5 = 1.4, fl6 = 1.4, fl7 = 1.5

從上邊的打印結(jié)果可以看出當(dāng)前面為1.3的時候最后一位為四舍五入, 當(dāng)前面為1.4的時候最后一位為五舍六入, 這是因為該機(jī)制為當(dāng)要保留的最后一位數(shù)為奇數(shù)時會采用四舍五入, 當(dāng)要保留的最后一位為偶數(shù)時采用五舍六入;
如果想要更多的舍入精度可以采用以下方法二

方法二

這個方法涉及到兩個類:NSDecimalNumber & NSDecimalNumberHandler

// 四舍五入涉及到的NSDecimalNumberHandler
// 類方法: + (instancetype)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;
/*
參數(shù)講解:
RoundingMode  四舍五入的標(biāo)準(zhǔn).
原始值: value 1.2  1.21  1.25  1.35  1.27
// Plain    1.2  1.2   1.3   1.4   1.3
// Down     1.2  1.2   1.2   1.3   1.2
// Up       1.2  1.3   1.3   1.4   1.3
// Bankers  1.2  1.2   1.2   1.4   1.3
    NSRoundPlain,   // Round up on a tie    嚴(yán)格遵守四舍五入
    NSRoundDown,    // Always down == truncate    直接舍去
    NSRoundUp,      // Always up                                 直接進(jìn)一位
    NSRoundBankers  // on a tie round so last digit is even   進(jìn)位標(biāo)準(zhǔn)同方法一

     scale : 需要保留的精度。
     raiseOnExactness : 為YES時在處理精確時如果有錯誤额划,就會拋出異常。
     raiseOnOverflow  : YES時在計算精度向上溢出時會拋出異常,否則返回流码。
     raiseOnUnderflow : YES時在計算精度向下溢出時會拋出異常,否則返回.
     raiseOnDivideByZero : YES時咕缎。當(dāng)除以0時會拋出異常外厂,否則返回。
*/
    NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:@"1.34"];
    NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:@"1.35"];
    NSDecimalNumber *num3 = [NSDecimalNumber decimalNumberWithString:@"1.44"];
    NSDecimalNumber *num4 = [NSDecimalNumber decimalNumberWithString:@"1.45"];
    NSDecimalNumberHandler *numHandler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers scale:1 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
    
    NSString *str1 = [[num1 decimalNumberByRoundingAccordingToBehavior:numHandler] stringValue];
    NSString *str2 = [[num2 decimalNumberByRoundingAccordingToBehavior:numHandler] stringValue];
    NSString *str3 = [[num3 decimalNumberByRoundingAccordingToBehavior:numHandler] stringValue];
    NSString *str4 = [[num4 decimalNumberByRoundingAccordingToBehavior:numHandler] stringValue];
    NSLog(@"\n%@,%@",str1,str2);
    NSLog(@"\n%@,%@",str3,str4);
打印結(jié)果:
str1 = 1.3,str2 = 1.4
str3 = 1.4,str4 = 1.4

補(bǔ)充:
NSDecimalNumber 同樣可以進(jìn)行加減乘除運(yùn)算:
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;

如有錯誤歡迎批評指正.
更多詳細(xì)內(nèi)容可參考蘋果官方文檔:
https://developer.apple.com/reference/foundation/nsdecimalnumber

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豌骏,一起剝皮案震驚了整個濱河市龟梦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窃躲,老刑警劉巖计贰,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒂窒,居然都是意外死亡躁倒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門洒琢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秧秉,“玉大人,你說我怎么就攤上這事衰抑∠笥” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵呛踊,是天一觀的道長砾淌。 經(jīng)常有香客問我,道長谭网,這世上最難降的妖魔是什么汪厨? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蜻底,結(jié)果婚禮上骄崩,老公的妹妹穿的比我還像新娘聘鳞。我一直安慰自己,他們只是感情好要拂,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布抠璃。 她就那樣靜靜地躺著,像睡著了一般脱惰。 火紅的嫁衣襯著肌膚如雪搏嗡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天拉一,我揣著相機(jī)與錄音采盒,去河邊找鬼。 笑死蔚润,一個胖子當(dāng)著我的面吹牛磅氨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫡纠,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼烦租,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了除盏?” 一聲冷哼從身側(cè)響起叉橱,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎者蠕,沒想到半個月后窃祝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡踱侣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年粪小,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡句。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡糕再,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玉转,到底是詐尸還是另有隱情突想,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布究抓,位于F島的核電站猾担,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刺下。R本人自食惡果不足惜绑嘹,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望橘茉。 院中可真熱鬧工腋,春花似錦姨丈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至趁冈,卻和暖如春歼争,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渗勘。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工沐绒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旺坠。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓乔遮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親取刃。 傳聞我的和親對象是個殘疾皇子申眼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

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

  • 前言 在日常的開發(fā)中我們隨時都會跟數(shù)字打著交道,對數(shù)字的處理也是很平常的事蝉衣,本文僅對常用的數(shù)字操作一個小結(jié),當(dāng)一個...
    進(jìn)無盡閱讀 1,108評論 0 2
  • 學(xué)會站在對方的立場上想問題巷蚪,不要只顧及自己病毡,不顧及其他人,這樣不僅能夠讓自己處理好很多事情屁柏,還能夠發(fā)現(xiàn)很多問題啦膜。
    鄧錦雙閱讀 112評論 0 0
  • 一周的奔忙,一周的疲憊淌喻,好想去郊外換換空氣僧家,換換心情,有了想法裸删,便悄悄的溜走了八拱。 深秋的傍晚,白沙河水庫的水面...
    薔薇苑閱讀 138評論 0 1