如何格式化并列出NSMutableArray中的float类型元素?
解决NSMutableArray中NSNumber格式化后批量显示的问题
这问题我太熟悉了,你之前遇到的核心问题就是要么覆盖内容,要么没格式化,其实只要把「逐个格式化」和「拼接所有内容」这两步正确结合起来就行,给你两种靠谱的实现方式:
方法一:用NSMutableString循环拼接(高效可控)
这种方式最直观,也能灵活控制元素之间的分隔符,避免多余的符号:
// 1. 初始化一个可变字符串,用来存储最终拼接好的内容 NSMutableString *finalText = [NSMutableString string]; // 2. 配置你的数字格式化器,这里用CurrencyStyle做示例,你可以换成DecimalStyle等 NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init]; numFormatter.numberStyle = NSNumberFormatterCurrencyStyle; // 如果需要固定小数位数(比如你要显示5.10而不是5.1),可以额外设置: numFormatter.minimumFractionDigits = 2; numFormatter.maximumFractionDigits = 2; // 3. 遍历数组,逐个格式化并拼接 for (NSNumber *num in array) { NSString *formattedNum = [numFormatter stringFromNumber:num]; // 如果已经有内容了,先加分隔符 if (finalText.length > 0) { [finalText appendString:@", "]; } [finalText appendString:formattedNum]; } // 4. 把最终内容赋值给textView self.textView.text = finalText;
为什么之前的循环赋值不行?
你之前的代码每次循环都直接把self.textView.text替换成当前元素的格式化内容,自然只会显示最后一个元素。用可变字符串先把所有内容拼好,再一次性赋值就解决了覆盖问题。
方法二:先转成格式化后的字符串数组,再拼接
这种方式更简洁,适合喜欢函数式写法的场景:
// 1. 同样先配置格式化器 NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init]; numFormatter.numberStyle = NSNumberFormatterCurrencyStyle; numFormatter.minimumFractionDigits = 2; numFormatter.maximumFractionDigits = 2; // 2. 把原数组的每个NSNumber转成格式化后的字符串 NSMutableArray *formattedStrings = [NSMutableArray array]; [array enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL *stop) { [formattedStrings addObject:[numFormatter stringFromNumber:obj]]; }]; // 3. 用componentsJoinedByString拼接成完整文本 self.textView.text = [formattedStrings componentsJoinedByString:@", "];
补充:关于小数位数的控制
你提到5.10显示成5.1不符合需求,这时候只要给NSNumberFormatter设置minimumFractionDigits和maximumFractionDigits为2,就能强制显示两位小数,完美解决这个问题。
内容的提问来源于stack exchange,提问作者John L
相关产品推荐
相关产品推荐

