2013-08-05 2 views
4

Я хочу, чтобы форматтер показывал - £ 4.00 как - 4,00 $, но он продолжает показывать его как (4,00 $), почему это?NSNumberВернуться к отображению скобок на отрицательных значениях

Эта функция ниже включает строки «00000014» в «£ 00.14», она также должна показывать отрицательные значения. Но число форматирования, похоже, добавляет скобки.

код ниже:

+(NSString *)pfsCurrencyAmountString:(NSString *)amount CurrencyCodeAsString:(NSString *)code{ 

if (amount == nil) { 
    return nil; 
} 

int amountLength = [amount length]; 
NSMutableString *amountMutable = [NSMutableString stringWithString:amount]; 

if (amountLength > 2) { 
    [amountMutable insertString:@"." atIndex:amountLength - 2]; 
} 

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init]; 
[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[currencyStyle setNumberStyle:@"NSNumberFormatterCurrencyStyle"]; 
[currencyStyle setLocale:locale]; 
[currencyStyle setCurrencyCode:code]; 

NSNumber * balance = [currencyStyle numberFromString:amountMutable]; 
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle]; 

return [currencyStyle stringFromNumber:balance]; 
} 
+0

'NSNumberFormatterCurrencyStyle' Значение валюты может быть отрицательным: O ??? –

+0

Пожалуйста, найдите существующие ответы, прежде чем задавать новый. –

+0

BTW, '[currencyStyle setNumberStyle: @" NSNumberFormatterCurrencyStyle "];' строка неверна; используйте '[currencyStyle setNumberStyle: NSNumberFormatterCurrencyStyle];' как вы это сделали позже. – Rob

ответ

2

Это кажется странным. При использовании,

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

Он печатает в скобках, но если вы используете другие идентификаторы для других стран, он печатает правильно.

Я вижу два пути:

  1. создать свой собственный форматировщик:

    [currencyStyle SetFormat: @ "¤ # ## 0,00"];

2. Еще один неправильный способ - использовать идентификатор австралии. Он форматирует то же самое, что вам нужно.

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AU"]; 
+0

Это связано с тем, что вам нужно учитывать локаль с числами, датами и т. Д., К сожалению, что какао делает именно по языку, недостаточно хорошо документировано. Некоторые из них находятся в отделении интенсивной терапии, а некоторые - в Apple. Я предлагаю заполнить ошибку документации с Apple. – uchuugaka

+0

хорошо ... это тот же wihn pl_PL на iOS8 – Marcin