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 に答える