在开发中经常会遇到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