Как использовать NSNumberFormatter для печати валюты в UITextField

Я здесь N00b.

Я печатаю свою валюту следующим образом:

-(IBAction)buttonPressed1:(id)sender
    {
        double currency = [Amount1.text doubleValue] + [Amount2.text doubleValue]; 
        SumCurrency.text = [NSString stringWithFormat:@"%0.0f", answer];
    }

Я просто хочу использовать NSSNumberFormatter для печати SumCurrency.text в формате валюты США. У меня много проблем с этим. Пожалуйста, помогите.

такая же проблема??? http://groups.jonzu.com/z_apple_using-a-nsnumberformatter-with-a-uitextfield.html

Заранее спасибо .

С уважением, N00b


person user285096    schedule 03.03.2010    source источник


Ответы (4)


Я получил ответ .. Но для дальнейшего использования

-(IBAction)buttonPressed1:(id)sender {
     double currency = [Amount1.text doubleValue] + [Amount2.text doubleValue]; 
     NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];                
     [numberFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
     NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:currency]];
     SumCurrency.text = [NSString stringWithFormat:@"Converted:%@",numberAsString]; 
}

или, в Свифте:

let amount = 123.56
let formatter = NumberFormatter()
formatter.locale = Locale.current
// or
// f.locale = Locale(identifier: "it_IT")
formatter.numberStyle = .currency

let formattedAmountSting = formatter.string(for: amount)!
person Omkar Jadhav    schedule 05.03.2010
comment
Пожалуйста, добавьте пример ввода/вывода. - person Awais Fayyaz; 18.07.2018

Это пример ситуации, когда категории в Objective-C сияют.

Самое чистое решение — создать категорию для NSNumber. .час:

@interface NSNumber (Formatter)

- (NSString *)currencyStringValue;

@end

И м:

@implementation NSNumber (Formatter)

- (NSString *)currencyStringValue
{
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.locale = [NSLocale currentLocale];
    formatter.numberStyle = NSNumberFormatterCurrencyStyle;

    return [formatter stringFromNumber:self];
}

@end

В вашем коде вам нужно #import "NSNumber+Formatter.h" и просто сделать это:

- (IBAction)buttonPressed1:(id)sender
{
    double total = [Amount1.text doubleValue] + [Amount2.text doubleValue];
    NSNumber *totalNumber = [NSNumber numberWithDouble:total];
    SumCurrency.text = totalNumber.currencyStringValue;
}

Очень ясно и чисто.

person Pedro Mancheno    schedule 24.08.2012

Использование float или double (арифметика с плавающей запятой) с деньгами — очень плохая идея из-за ошибок точности. Вы должны использовать арифметику с фиксированной точкой, также известную как NSDecimalNumber.

person Ricardo    schedule 07.09.2015
comment
Хотя это обычно верно для систем данных, для целей отображения метод с плавающей запятой вполне разумен, если все, что вы хотите отобразить число. - person Colin Basnett; 18.10.2016

person    schedule
comment
Эй, спасибо за это. Я проверю это прямо сейчас. Мне нужно поместить это внутрь -(IBAction)buttonPressed1:(id)sender {} правильно? Благодаря тонну - person user285096; 03.03.2010
comment
Я до сих пор не могу понять, как реализовать в приведенном выше коде... кто-нибудь ?? пожалуйста помоги - person user285096; 03.03.2010
comment
Сначала вам нужно получить значение, которое вы хотите отобразить. Затем создайте модуль форматирования, создайте строковое представление, используя 'stringFromNumber'. Когда у вас есть NSString, вы можете делать все, что хотите. Если это для UILabel, просто используйте метод setText... - person Macmade; 03.03.2010
comment
Как я могу использовать SumCurrency.text = [NSString stringWithFormat:@%0.0f, ответ]; получить ответ а не NSLog ????????????? - person user285096; 04.03.2010
comment
@ user285096 - я бы сказал вам, но вы не использовали достаточно вопросительных знаков, извините. - person katzenhut; 10.10.2013