例如有一個浮點數pi=3.141592,我們需要保留小數點后三位,如果是簡單的四舍五入就會很好處理,
NSString *str = [NSString stringWithFormat:@"%.3f", pi];
這樣得到的結果就是:3.142
但是有時候我們不需要四舍五入的結果,只要它“只舍不進”。
NSDecimalNumber是iOS系統的api,是一種精確計算。主要解決以下問題:
1、字符串轉float等不精確問題。
2、精確計算
3、保留小數位數
4、四舍五入及其它的保留小數位數規則
/*
*?number 需處理的數據
*position 小數點后位數
*/
-(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初始化時的關鍵參數:
①、decimalNumberHandlerWithRoundingMode:NSRoundDown,
NSRoundDown代表的就是 “向下保留”(只舍不入),
NSRoundUp代表的就是“向上保留”(只進不舍),
NSRoundPlain代表的就是“四舍五入”,
NSRoundBankers代表的就是:
if(四舍五入位==5){if(5后有非0數字){//如:1.251? - 1.26入}else{//如:1.25 - 1.25舍}}else{四舍五入}
②、scale的參數position:保留小數點后幾位。
介紹完參數后,我們看看上面代碼對浮點數pi 向上保留小數點后3位的處理結果是3.141。
如果decimalNumberHandlerWithRoundingMode:NSRoundUp, 結果就是3.142。
順帶介紹兩個系統系帶的方法
ceil(? ) “向上取整”:返回大于或者等于指定表達式的最小整數floor(? ) “向下取整”:返回小于或者等于指定表達式的最大整數