番号がある場合int aNum = 2000000
NSString 2,000,000として表示できるように、これをどのようにフォーマットしますか?
独自の数値書式設定をしないでください。ほとんどの場合、すべてのEdgeケースを正しく取得したり、すべての可能なロケールを正しく処理したりすることはできません。数値データをローカライズされた文字列表現にフォーマットするには、 NSNumberFormatter
を使用します。
NSNumberFormatter
インスタンスメソッド-setGroupingSeparator:
を使用して、グループ化セパレーターを@","
(またはそれ以上の[[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator]
; @nteslerに感謝)と-setGroupingSize:
に設定します。 3桁ごとのグループ化区切り。
NSNumberFormatter
を使用します。
具体的には:
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!
NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:2000000]];
[formatter release];
デフォルトでは、NSNumberFormatter
は現在のロケールを使用するため、デフォルトでグループ化セパレーターは正しい値に設定されます。重要なことは、数字のスタイルを設定することを忘れないことです。
NSNumberFormatter
の静的メソッド があり、必要なことだけを行います:
int aNum = 2000000;
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(aNum)
numberStyle:NSNumberFormatterDecimalStyle];
フォーマッタの追加設定を行う必要がない場合、この方法は新しいNSNumberFormatter
を作成するよりも少し簡潔です。
さらに簡単:
NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);
同僚が今日これを教えてくれました。 #すごい
この投稿でサンプルを探しているので、いくつか考えてみてください。したがって、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]];
スイフト版
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.maximumFractionDigits = decimalPlaces
let result = formatter.stringFromNumber(NSNumber(double: 8.0))
Swift 4.の場合
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let result = formatter.string(from: NSNumber(value: 123456))
簡単な解決策はこれかもしれません。私の答えは、@ 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]]];