数字转成千分分隔

今天用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的区别的朋友,还请留言,大家一起学习。

你可能感兴趣的:(数字转成千分分隔)