今天用NSString转float遇到一件非常坑的事,看代码
NSString * floatString = @"100.1";
float numb = [floatString floatValue];
我以为numb会是100.1,结果不是,有可能是100.101或者100.091,百思不得其解啊,然后就查查想知道这是为什么。最后总结一下,浮点数的存储本来就是不精确存储,在实际开发中更不能使用float类型的数字进行相等比较判断。但我使用double类型的就可以正确输出数值。
我是想用这个数值来转换成千分分隔的数字,但系统提供的集中方式有时候不满足我的要求,我们可以自定义一下数字格式
+(NSString *)floatNumberAddDelimiter:(NSString*)doubleNumString{
if([doubleNumString rangeOfString:@","].location == NSNotFound){
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
//自定义格式
[formatter setPositiveFormat:@"###,###.00;"];
return [formatter stringFromNumber:[NSNumber numberWithDouble:[doubleNumString doubleValue]]];
}else{
return doubleNumString;
}
}
这个0和#到底什么意思我也不太理解,但是我自己试验了一下,比如你输入的是字符串是@"1000.1"
,如果format
是@"###,###.00;"
,那么返回的就是@"1,000.10"
。如果format
是@"###,###.##;"
,那么返回就是@"1,000.1"
。剩下的还得大家自己去摸索,如果有知道#和0的区别的朋友,还请留言,大家一起学习。