web-dev-qa-db-ja.com

Objective Cで3桁ごとに番号にカンマを追加する方法は?

番号がある場合int aNum = 2000000 NSString 2,000,000として表示できるように、これをどのようにフォーマットしますか?

71
RexOnRoids

独自の数値書式設定をしないでください。ほとんどの場合、すべてのEdgeケースを正しく取得したり、すべての可能なロケールを正しく処理したりすることはできません。数値データをローカライズされた文字列表現にフォーマットするには、 NSNumberFormatter を使用します。

NSNumberFormatterインスタンスメソッド-setGroupingSeparator:を使用して、グループ化セパレーターを@","(またはそれ以上の[[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]; @nteslerに感謝)と-setGroupingSize:に設定します。 3桁ごとのグループ化区切り。

80
Barry Wark

NSNumberFormatterを使用します。

具体的には:

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!

NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];

[formatter release];

デフォルトでは、NSNumberFormatterは現在のロケールを使用するため、デフォルトでグループ化セパレーターは正しい値に設定されます。重要なことは、数字のスタイルを設定することを忘れないことです。

147
Nik

NSNumberFormatterの静的メソッド があり、必要なことだけを行います:

int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
                                                     numberStyle:NSNumberFormatterDecimalStyle];

フォーマッタの追加設定を行う必要がない場合、この方法は新しいNSNumberFormatterを作成するよりも少し簡潔です。

33
Phil Calvin

さらに簡単:

NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);

同僚が今日これを教えてくれました。 #すごい

18
yujean

この投稿でサンプルを探しているので、いくつか考えてみてください。したがって、numberを使用している場合は、次のパラメーターに注意してください。

setNumberStyle:NSNumberFormatterCurrencyStyle // if you are working with currency

かもしれない

setNumberStyle:NSNumberFormatterDecimalStyle

すべてのコードはFor ARCです。

Integerを使用しており、200,000などの結果を取得する必要がある場合

int value = 200000;
NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithInteger:value]];

Floatを使用していて、200,000.00などの結果を取得する必要がある場合

float value = 200000;
NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
NSString * newString =  [formatter stringFromNumber:[NSNumber numberWithFloat:value]];

[〜#〜] edit [〜#〜]

異なるデジタルセパレーターを使用する機能を使用するには、NSLocaleを使用します。ロケール識別子でNSLocaleが指定されているコードに追加します。

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"]];

または現在のローカルを使用します:

[formatter setLocale:[NSLocale currentLocale]];
16
Nazir

スイフト版

let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))

http://ios.eezytutorials.com

1
Raj iOS

Swift 4.の場合

let formatter = NumberFormatter()

formatter.numberStyle = .decimal

formatter.minimumFractionDigits = 2

formatter.maximumFractionDigits = 2

let result = formatter.string(from: NSNumber(value: 123456))
0

簡単な解決策はこれかもしれません。私の答えは、@ Nazirの答えとほとんど同じですが、ちょっとしたトリックがあります。

double current_balance = 2000000.00;

NSNumberFormatter * formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
//[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];  //if you want for currency with $ sign
[formatter setMinimumFractionDigits:2]; // Set this if you need 2 digits
[formatter setMaximumFractionDigits:2]; // Set this if you need 2 digits
NSString * currency_format =  [NSString stringWithFormat:@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:current_balance]]];
0