例如有一個(gè)浮點(diǎn)數(shù)pi=3.141592,我們需要保留小數(shù)點(diǎn)后三位耀石,如果是簡(jiǎn)單的四舍五入就會(huì)很好處理牵囤,
NSString *str = [NSString stringWithFormat:@"%.3f", pi];
這樣得到的結(jié)果就是:3.142
但是有時(shí)候我們不需要四舍五入的結(jié)果爸黄,只要它“只舍不進(jìn)”。
NSDecimalNumber是iOS系統(tǒng)的api揭鳞,是一種精確計(jì)算炕贵。主要解決以下問(wèn)題:
1、字符串轉(zhuǎn)float等不精確問(wèn)題野崇。
2称开、精確計(jì)算
3、保留小數(shù)位數(shù)
4乓梨、四舍五入及其它的保留小數(shù)位數(shù)規(guī)則
/*
*?number 需處理的數(shù)據(jù)
*position 小數(shù)點(diǎn)后位數(shù)
*/
-(NSString*)notRounding:(float)number afterPoint:(int)position{
NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandlerdecimalNumberHandlerWithRoundingMode:NSRoundUpscale:positionraiseOnExactness:NOraiseOnOverflow:NOraiseOnUnderflow:NOraiseOnDivideByZero:NO];
NSDecimalNumber*ouncesDecimal;
NSDecimalNumber*roundedOunces;ouncesDecimal = [[NSDecimalNumberalloc] initWithFloat: number];roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior: roundingBehavior];
return[NSStringstringWithFormat:@"%@", roundedOunces];
}
NSDecimalNumberHandler初始化時(shí)的關(guān)鍵參數(shù):
①鳖轰、decimalNumberHandlerWithRoundingMode:NSRoundDown,
NSRoundDown代表的就是 “向下保留”(只舍不入)扶镀,
NSRoundUp代表的就是“向上保留”(只進(jìn)不舍)蕴侣,
NSRoundPlain代表的就是“四舍五入”,
NSRoundBankers代表的就是:
if(四舍五入位==5){if(5后有非0數(shù)字){//如:1.251? - 1.26入}else{//如:1.25 - 1.25舍}}else{四舍五入}
②臭觉、scale的參數(shù)position:保留小數(shù)點(diǎn)后幾位昆雀。
介紹完參數(shù)后,我們看看上面代碼對(duì)浮點(diǎn)數(shù)pi 向上保留小數(shù)點(diǎn)后3位的處理結(jié)果是3.141蝠筑。
如果decimalNumberHandlerWithRoundingMode:NSRoundUp, 結(jié)果就是3.142狞膘。
順帶介紹兩個(gè)系統(tǒng)系帶的方法
ceil(? ) “向上取整”:返回大于或者等于指定表達(dá)式的最小整數(shù)floor(? ) “向下取整”:返回小于或者等于指定表達(dá)式的最大整數(shù)