I'm programming an app which uses currencies. And since the app will be used in different countries I need to support the correct currency for each user.

So I made a category for NSDecimalNumber. I want to have 2 functions:

-(NSString *) getLocalizedCurrencyString: Should give me the correct string (without currency symbol, however with the local decimal separator sign and 2 digits) and

+ (NSDecimalNumber *) getUnLocalizedDecimalNumberWithString:(NSString *)currencyString: Should give me a decimal number (I guess also with 2 digits) getting rid of the local decimal separator and using the "regular" one needed to save into coredata.

However my functions don't really work. The first one does mostly, however the 2nd one always truncates the digits. What am I doing wrong?

- (NSString *) getLocalizedCurrencyString
{
    NSNumberFormatter *numberFormatter =[[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [numberFormatter setCurrencySymbol:@""];

    NSString *numberString = [numberFormatter stringFromNumber:self];
    return numberString;
}

+ (NSDecimalNumber *) getUnLocalizedDecimalNumberWithString:(NSString *)currencyString
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [numberFormatter setCurrencySymbol:@""];

    BOOL isDecimal = [numberFormatter numberFromString:currencyString] != nil;
    if(isDecimal){
        return [NSDecimalNumber decimalNumberWithString:currencyString];
    } else {
        return [NSDecimalNumber zero];
    }
}
有帮助吗?

解决方案

You can use locale parameter in NSNumberFormatter to convert NSDecimalNumber to correct string:

NSNumberFormatter *numberFormatter =[[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setCurrencySymbol:@""];
[numberFormatter setLocale:[NSLocale currentLocale]];

If you want to convert it back you use locale parameter when you create NSDecimalNumber:

NSDecimalNumber *dNumber = [[NSDecimalNumber alloc] initWithString:numberString locale:[NSLocale currentLocale]];

Hope this is what you are after.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top