我有一个名为valuesArray
的字符串数组,其中包含如下值:2913451.0938
我正在尝试格式化这些数字,以便我可以像这样显示它们:2,913,451.09
使用以下代码,我能够从数组中读取值并将它们转换为NSNumbers(num
),我还可以创建一个格式化程序来定义我希望如何显示数字( formatter
)。
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
NSNumber *num = valuesArray[indexPath.row];
NSLog(@"num: %@",num);
NSLog(@"Formatter: %@",formatter);
NSString *forNum = [formatter stringFromNumber:num];
NSLog(@"FormattedNum: %@",forNum);
当我运行代码并到达NSLog(@"FormattedNum: %@",forNum);
行时,我看到它打印null
。我错过了什么?
答案 0 :(得分:1)
代码中的问题是您从字符串数组valueArray
中检索元素,但将其分配给NSNumber
类型的变量 - 而对象确实是NSString
。当你将它传递给格式化程序时,它返回nil
(即使它也可能崩溃,它只是未定义的行为)。
您必须将字符串转换为NSNumber
:
NSNumber *num = @([valuesArray[indexPath.row] doubleValue]);
答案 1 :(得分:0)
我刚用这个值检查了这段代码:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
NSNumber *num = @(2913451.0938);
NSLog(@"num: %@",num);
NSLog(@"Formatter: %@",formatter);
NSString *forNum = [formatter stringFromNumber:num];
NSLog(@"FormattedNum: %@",forNum);
它工作正常,没有任何错误,就像你提到的那样。
参见输出:
2013-02-28 21:35:44.417 BrowserModal[4861:403] num: 2913451.0938
2013-02-28 21:35:44.418 BrowserModal[4861:403] Formatter: <NSNumberFormatter: 0x100160840>
2013-02-28 21:35:44.419 BrowserModal[4861:403] FormattedNum: 29,13,451.09
请清理目标并重新构建。
和
确保valuesArray[indexPath.row]
返回一个装箱的NSNumber
对象。
执行:@([valuesArray [indexPath.row] doubleValue]);