Objective-CFloat转化成NSString小数不精确解决
在开发中经常会遇到Float类型转化成NSString类型后不准确的问题
float a = 0.96; NSString *str = [NSString stringWithFormat:@"%.1f",a]; NSLog(@"%@",str);
打印
2018-05-25 16:24:14.457366+0800 Test[19641:4237944] 1.0
我们想要的是输出0.9
这种问题怎么处理 可以写一个NSString的Category来处理
#import "NSString+Precision.h" @implementation NSString (Precision) /** Float 类型转化成字符串获取小数点后N位 @param value 需要转化的Value @param position 小数点后几位 @return 转化后的字符串 */ + (NSString *)decimalNumberWithFloat:(float)value position:(int)position { NSString *doubleString = [NSString stringWithFormat:@"%lf", value]; NSDecimalNumber *decNumber = [NSDecimalNumber decimalNumberWithString:doubleString]; NSString *decStr = [decNumber stringValue]; // 获取"."所在字符串中的Range NSRange range = [decStr rangeOfString:@"."]; // 处理整型没有小数点的情况(小数点后加两个0,方便转化成金额) if (range.length == 0) { decStr = [NSString stringWithFormat:@"%@.00",decStr]; } range = [decStr rangeOfString:@"."]; // 最大截取范围 NSInteger maxCutRange = decStr.length - range.location - 1; // 是否超出了最大截取范围 if (position <= maxCutRange) { decStr = [decStr substringWithRange:NSMakeRange(0, range.length + position + range.location)]; } else{ // 超出范围按最大来 decStr = [decStr substringWithRange:NSMakeRange(0, range.length + maxCutRange + range.location)]; } return decStr; } @end
NSLog(@"-----------%@",[self decimalNumberWithFloat:0.96 position:1]); 输出 2018-05-25 16:27:53.547775+0800 DD[19782:4242695] -----------0.9优质内容筛选与推荐>>