How to use NSNumberFormatter to print currency in UITextField

I am here N00b.

I print my currency as follows:

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

I just want to use NSSNumberFormatter to print SumCurrency.text in US currency format. Having a lot of problems with this. Please hekp

same problem??? http://groups.jonzu.com/z_apple_using-a-nsnumberformatter-with-a-uitextfield.html

Thanks at Advance.

Regards, N00b

+3
source share
4 answers

I got an answer. But for any future reference

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

or, in 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)
+16
source

This is an example of a situation where categories in Objective-C shine.

The cleanest solution is to create a category for 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;
}

.

+4
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 ; ) */
+1
source

Using float or double (floating point arithmetic) with money is a very bad idea, because the accuracy of errors. You should use fixed point arithmetic as well as NSDecimalNumber.

-1
source

Source: https://habr.com/ru/post/1735189/


All Articles