0

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. 我错过了什么?

4

2 回答 2

1

您的代码中的问题是您从字符串数组中检索一个元素,valueArray但将其分配给一个NSNumber类型化变量——而该对象实际上是一个NSString. 当您将它传递给它返回的格式化程序时nil(即使它也可能崩溃,这只是未定义的行为)。

您必须将字符串转换为NSNumber

NSNumber *num = @([valuesArray[indexPath.row] doubleValue]);
于 2013-02-28T16:15:21.283 回答
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]);

于 2013-02-28T16:09:46.403 回答