6

NSNumberFormatter の currencySymbol の取得に問題があります。
通貨コード「EUR」の NSNumberFormatter を使用しています。
価格をフォーマットすると、記号は正しく、€ 記号が表示されます。
しかし、メソッド [formatter currencySymbol] で currencySymbol だけを取得したい場合は、記号 $ が返されます。
currencySymbol を手動で設定すると (たとえば "A" を使用)、すべて正常に動作し、[formatter currencySymbol] メソッドは "A" 記号を返します。


これが私のコードです

// Create formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setCurrencyCode:@"EUR"];
[formatter setLocale:[NSLocale currentLocale]];

// Log the currency symbol
NSLog(@"[formatter currencyCode] : %@", [formatter currencyCode]);
NSLog(@"[formatter currencySymbol] : %@", [formatter currencySymbol]);
NSLog(@"[formatter currencySymbol] : %@", [formatter stringFromNumber:[NSNumber numberWithInt:0]]);
[formatter setCurrencySymbol:@"A"];
NSLog(@"[formatter currencySymbol] : %@", [formatter currencySymbol]);
NSLog(@"[formatter currencySymbol] : %@", [formatter stringFromNumber:[NSNumber numberWithInt:0]]);

コンソールの結果は次のとおりです。

2012-01-17 12:29:11.108[4545:207] [formatter currencySymbol] : $
2012-01-17 12:29:11.109[4545:207] [formatter currencySymbol] : €0.00
2012-01-17 12:29:11.110[4545:207] [formatter currencySymbol] : A
2012-01-17 12:29:11.111[4545:207] [formatter currencySymbol] : A0.00

currencySymbol は変更される可能性があるため、強制することはできません。
与えられた currencyCode に対応する正しい currencySymbol を取得する方法はありますか?

ありがとう

4

4 に答える 4

2

で使用できる通貨記号を取得するにNSLocaleCurrencySymbolNSLocale:

   NSLocale* locale = [NSLocale currentLocale];
   NSString* cs = [locale displayNameForKey:NSLocaleCurrencySymbol
                                 value:currencyCode];

ローカライズされた名前 (' US Dollar '、' Japanese Yen '、..) を取得するには、以下を使用できますNSLocaleCurrencyCode

   NSLocale* locale = [NSLocale currentLocale];
   NSString* cc = [locale displayNameForKey:NSLocaleCurrencyCode
                              value:currencyCode];

currencyCode、関心のある通貨コード (JPY、USD、EUR、..) です。

于 2014-05-05T16:28:25.750 に答える
1

問題は[formatter setLocale:[NSLocale currentLocale]];、それ以前に行った構成の一部を上書きすることである可能性があります。その行を一番上 (alloc/init 行の直後) に移動してみてください。

于 2012-01-17T13:16:09.873 に答える
-1

次のコード/メソッドを使用して、浮動小数点値から通貨を取得しました

 +(NSString *) formatCurrencyTypeFloat: (float )val {

 NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"us_ES"];
    or
    NSLocale *locale = [NSLocale currentLocale];;
    [formatter setLocale:locale]; 
    NSLog(@"%@",[formatter stringFromNumber:[NSNumber numberWithFloat:val]]);
    return [formatter stringFromNumber:[NSNumber numberWithFloat:val]];

}



+(NSString *) formateCurrencyTypeFloat:(float)val withSign:(NSString *)currencySign{
    NSNumberFormatter * fmt;
    NSNumber          * n;

    fmt = [[ [ NSNumberFormatter alloc ] init ]autorelease];
    n   = [ NSNumber numberWithFloat: val];

    [ fmt setFormatterBehavior: NSNumberFormatterBehavior10_4 ];
    [ fmt setCurrencySymbol: currencySign ]; //==> currencySign can be = @"$";
    [ fmt setNumberStyle: NSNumberFormatterCurrencyStyle ];


    return [ fmt stringFromNumber:n];
}

+(NSString *) formateCurrencyTypeFloat:(float)val withCode:(NSString *)currencyCode{
        NSNumberFormatter * fmt;
        NSNumber          * n;

        fmt = [[ [ NSNumberFormatter alloc ] init ]autorelease];
        n   = [ NSNumber numberWithFloat: val];

        [ fmt setFormatterBehavior: NSNumberFormatterBehavior10_4 ];
        [fmt setCurrencyCode:currencyCode];//====>@"USD";
        [ fmt setNumberStyle: NSNumberFormatterCurrencyStyle ];


        return [ fmt stringFromNumber:n];
    }
于 2012-07-12T12:33:54.903 に答える