You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何格式化并列出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:43:03