方案1:NSDecimalNumber做處理
開發(fā)中處理處理價格金額問題, 后臺經(jīng)常返回float苦丁、double類型, 打印或轉(zhuǎn)成NSString都會有精度丟失問題, 因此使用系統(tǒng)自帶的NSDecimalNumber做處理, 能解決這問題:
處理精度有關(guān)的數(shù)據(jù)先把數(shù)據(jù)轉(zhuǎn)成double類型
此處我是以string方式接收的珊楼,直接添加NSString的分類,修正方法貼出來如下:
+(NSString )reviseString:(NSString )string{
/* 直接傳入精度丟失有問題的Double類型*/
double conversionValue = (double)[string floatValue];
NSString *doubleString = [NSString stringWithFormat:@"%lf", conversionValue];
NSDecimalNumber *decNumber = [NSDecimalNumber decimalNumberWithString:doubleString];
return [decNumber stringValue];
}
方案二:寫一個NSString的擴展
@interface NSString (MCPriceString)
- (NSString *)mc_priceString;
@end
@implementation NSString (MCPriceString)
- (NSString *)mc_priceString {
static NSNumberFormatter *formatter;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
formatter.minimumIntegerDigits = 1;
});
return [formatter stringFromNumber:[formatter numberFromString:self]];
}
@end
formatter.maximumFractionDigits = 2;表示最多保留兩位小數(shù)
formatter.minimumIntegerDigits = 1;表示最少保留一位整數(shù)晰房,防止像0.01出現(xiàn).01的情況堵未。