0

私はこれらの数値形式を持っています:

100000,459
100000459
100.000
100.000,59
100.000.000,39

ユーザーが値を入力すると、数値が変化します。値を追加するたびに、NSNumberFormatter で数値を再フォーマットする必要があります。問題は、この番号がすでに . と 、およびフォーマッタはこれらを正しく処理していないようです。次のようになります。

100 000,00
100 000 459,00
100,00
100,00
100,00

たとえば、100000,459 を 100 000,459 にしたい。

私が今使っているコード:

NSNumber *amount = [NSNumber numberWithInt:[string intValue]];
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"nb_NO"];
[currencyFormatter setLocale:locale];
NSString *commaString = [currencyFormatter stringForObjectValue:amount];

すでにフォーマットされている数値をフォーマットするにはどうすればよいですか?

4

3 に答える 3

1

In the last line you are trying to format a string rather than a number. Try this:

NSString *commaString = [currencyFormatter stringFromNumber:amount];

Here is a good reference.

于 2010-12-10T11:24:55.967 に答える
0

私はその特定の参照を見てきました。私の場合、フォーマット時にすでに小数が含まれている可能性があるため、私の問題とは異なります。

于 2010-12-10T11:34:32.113 に答える
0

NSNumberFormatter数値を文字列表現にフォーマットします。期待どおりにフォーマットするには、数値の正しい表現が必要です。コードサンプルを見ると、フォーマッタに整数値を提供しているため、取得している出力を取得しています。であなたstring = @"100000,459" [string intValue]を与えます100000。これが、フォーマッタからの出力が100 000,00.

あなたがする必要があるのは、最初に文字列を double 表現にすることです。を使用することで実現できますNSScanner。桁区切りが適切に検出されるように、正しいロケールで数字をスキャンすることを確認する必要があります。最初の文字列は、次の方法で double に変換できます。

NSScanner *scanner = [NSScanner scannerWithString:@"100000,459"];
[scanner setLocale:locale];
double val;
[scanner scanDouble:&val];
NSNumber *amount = [NSNumber numberWithDouble:val];

私が知らない千の区切り記号を適切に処理する方法。

于 2010-12-10T15:20:15.407 に答える