ios使用后台接受float类型出现精度不准

方案1:NSDecimalNumber做处理
开发中处理处理价格金额问题, 后台经常返回float、double类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:

处理精度有关的数据先把数据转成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;表示最多保留两位小数

formatter.minimumIntegerDigits = 1;表示最少保留一位整数,防止像0.01出现.01的情况。

你可能感兴趣的:(ios使用后台接受float类型出现精度不准)