?- (NSString*)notRounding:(CGFloat)price afterPoint:(NSInteger)position {
NSDecimalNumberHandler*roundingBehavior = [NSDecimalNumberHandlerdecimalNumberHandlerWithRoundingMode:NSRoundDownscale:positionraiseOnExactness:NOraiseOnOverflow:NOraiseOnUnderflow:NOraiseOnDivideByZero:NO];
NSDecimalNumber*ouncesDecimal;
NSDecimalNumber*roundedOunces;
ouncesDecimal = [[NSDecimalNumberalloc]initWithString:[NSStringstringWithFormat:@"%@",@(price)]];
roundedOunces = [ouncesDecimaldecimalNumberByRoundingAccordingToBehavior:roundingBehavior];
return[NSStringstringWithFormat:@"%@",roundedOunces];
}
遇到開發(fā)項目中數(shù)據(jù)顯示需要四舍五入的擦酌,也遇到不需要四舍五入的邢享,本人就說說這個四舍五入吧财骨。
介紹一下參數(shù):
price:需要處理的數(shù)字换帜,
position:保留小數(shù)點第幾位腊敲,
然后調(diào)用
float s =0.126;
NSString *sv = [self notRounding:s afterPoint:2];
NSLog(@"sv = %@",sv);
輸出結(jié)果為:sv = 0.12
接下來介紹NSDecimalNumberHandler初始化時的關(guān)鍵參數(shù):decimalNumberHandlerWithRoundingMode:NSRoundDown嘹锁,
NSRoundDown代表的就是只舍不入右蒲。
scale的參數(shù)position代表保留小數(shù)點后幾位。
如果只入不舍怎么辦赶熟,比如瑰妄,float 0.162 想要得到0.17該怎么做?映砖,在開發(fā)文檔上有這樣一個表间坐,是按照保留小數(shù)點后一位處理的。相信大家一看就明白了:
方法二:
1邑退、round(12345.6789)結(jié)果為:12346
2竹宋、round(12345.6789*100)/100結(jié)果為:12345.68
第二個是我要的結(jié)果,但是我不明白這么個簡單的四舍五入要搞的這么復(fù)雜地技,應(yīng)該有更好的吧蜈七,我記得在其他語言里用:round(12345.6789,2)就可以實現(xiàn)四舍五入到兩位小數(shù)莫矗。
tips:一般我有一個習慣喜歡用%.2f轉(zhuǎn)換數(shù)據(jù) 這種情況其實就是四舍五入的飒硅。