一、準備
測試數(shù)據(jù)
float A = 0.124000;
float B = 0.124200;
float C = 0.125000; (重點關注)
float D = 0.125001;
float E = 0.126000;
目的:float保留兩位小數(shù)顯示怪得,四舍五入甜害。
二舶掖、幾種嘗試
2.1、最簡單的方法
NSString * showA = [NSString stringWithFormat:@"%0.2f",X];
// 輸出
A = 0.124000; --> A = 0.12
B = 0.124200; --> B = 0.12
C = 0.125000; --> C = 0.12
D = 0.125001; --> D = 0.13
E = 0.126000; --> E = 0.13
結果出現(xiàn)了一些偏差尔店。也就是 float C = 0.125000
的情況眨攘。
2.2主慰、NSDecimalNumber
- 進一步探討,可查看
iOS 浮點數(shù)的精確計算和四舍五入問題
/*
枚舉
NSRoundPlain, // Round up on a tie 貌似取整
NSRoundDown, // Always down == truncate 只舍不入
NSRoundUp, // Always up 只入不舍
NSRoundBankers // on a tie round so last digit is even 貌似四舍五入
*/
NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
NSDecimalNumber * ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:X];
NSDecimalNumber * roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
NSString * showX = [NSString stringWithFormat:@"%@",roundedOunces];
// 輸出
A = 0.124000; --> A = 0.12
B = 0.124200; --> B = 0.12
C = 0.125000; --> C = 0.12 (重點關注)
C1 = 0.135000; --> C = 0.14 (重點關注)
D = 0.125001; --> D = 0.13
E = 0.126000; --> E = 0.13
結果同上鲫售, float C = 0.125000
的情況還不行共螺。
NSRoundPlain
和NSRoundBankers
都不是傳統(tǒng)的四舍五入。
1情竹、NSRoundPlain
是四舍六進若五前偶數(shù)進位奇數(shù)舍去藐不。如:1.25 ~ 1.3;1.15 ~ 1.1
2秦效、NSRoundBankers
是四舍六進若五前偶數(shù)舍去奇數(shù)進位雏蛮。如:1.25 ~ 1.2;1.15 ~ 1.2
2.3阱州、roundf()
NSString * showX = [NSString stringWithFormat:@"%0.2f",roundf(X * 100)/100];
// 輸出
A = 0.124000; --> A = 0.12
B = 0.124200; --> B = 0.12
C = 0.125000; --> C = 0.13
D = 0.125001; --> D = 0.13
E = 0.126000; --> E = 0.13
發(fā)現(xiàn)這個方法好像更靠譜點挑秉。
拓展的相關的其他函數(shù)
round 如果參數(shù)是小數(shù) 則求本身的四舍五入.
ceil 如果參數(shù)是小數(shù) 則求最小的整數(shù)但不小于本身.
floor 如果參數(shù)是小數(shù) 則求最大的整數(shù)但不大于本身.
三、尾部清零
NSString * floatnum = @"0.125000"
NSString * outNumber1 = [NSString stringWithFormat:@"%@",@(floatnum.floatValue)];
四贡耽、項目需求:保留2位小數(shù)(四舍五入)衷模,末尾如果是零,則不要蒲赂。
+ (NSString *)FloatKeepTwoBitsAndRemoveAllZero:(float)floatnum {
// 保留2位小數(shù)
NSString * tempfloat = [NSString stringWithFormat:@"%0.2f",roundf(floatnum * 100)/100];
// 末尾清零
return [NSString stringWithFormat:@"%@",@(tempfloat.floatValue)];
}