NSNumberFormatter Currency Without Symbol?

With Swift 5, NumberFormatter has a property called currencySymbol. currencySymbol has the following declaration:

var currencySymbol: String! { get set }

The string used by the receiver as a local currency symbol.

Therefore, if required for your formatting style, you can set this property to an empty String.


The following Playground sample code shows how to set your currency formatting style with an empty symbol:

import Foundation

let amount = 12000

let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.currency
formatter.currencySymbol = ""
formatter.locale = Locale(identifier: "en_US") // set only if necessary

let result = formatter.string(for: amount)
print(String(describing: result)) // prints: Optional("12,000.00")

Yes, after you set the style, you can tweak specific aspects:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterCurrencyStyle];
[nf setCurrencySymbol:@""]; // <-- this
NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:[textField text]];
NSString *price = [nf stringFromNumber:number];

Just as some advice, you should probably use a number formatter to read the string value, especially if a user is entering it (as suggested by your code). In this case, if the user enters locale-specific formatting text, the generic -floatValue and -doubleValue type methods won't give you truncated numbers. Also, you should probably use -doubleValue to convert to a floating point number from user-entered text that's a currency. There's more information about this in the WWDC'12 developer session video on internationalization.

Edit: Used an NSDecimalNumber in the example code to represent the number the user enters. It's still not doing proper validation, but better than the original code. Thanks @Mark!


as for Swift Language

let mymoney = 12000

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.currencySymbol = ""
formatter.locale = NSLocale.currentLocale()

let resultString = formatter.stringFromNumber(mymoney)!