Как использовать NSNumberFormatter для валюты для печати в UITextField - PullRequest
3 голосов
/ 03 марта 2010

Я здесь N00b.

Я печатаю свою валюту так:

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

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

тот же вопрос ??? http://groups.jonzu.com/z_apple_using-a-nsnumberformatter-with-a-uitextfield.html

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

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

Ответы [ 4 ]

17 голосов
/ 05 марта 2010

Я получил ответ .. Но для чьей-либо будущей ссылки

-(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]; 
}

или, в Swift:

let amount = 123.56
let formatter = NSNumberFormatter()
formatter.locale = NSLocale.currentLocale()
// or
// f.locale = NSLocale(localeIdentifier: "it_IT")
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle

let formattedAmountSting = formatter.stringFromNumber(amount)
4 голосов
/ 24 августа 2012

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

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

@interface NSNumber (Formatter)

- (NSString *)currencyStringValue;

@end

и .m:

@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;
}

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

1 голос
/ 03 марта 2010
NSNumberFormatter * fmt;
NSNumber          * n;

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

[ fmt setFormatterBehavior: NSNumberFormatterBehavior10_4 ];
[ fmt setCurrencySymbol: @"$" ];
[ fmt setNumberStyle: NSNumberFormatterCurrencyStyle ];

NSLog( @"%@", [ fmt stringFromNumber: n ];

[ fmt release ] /* Thanx willcodejavaforfood... My mistake ; ) */
0 голосов
/ 07 сентября 2015

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

...