YogeshChauhan.com
How to implement NSNumberFormatter in Swift for currency?
March 5, 2020

To show a number in proper currency format, we are going to use following classes.

NSNumber

An object wrapper for primitive scalar numeric values.

NSNumber is a subclass of NSValue that offers a value as any C scalar (numeric) type. It defines a set of methods specifically for setting and accessing the value as a signed or unsigned char, short int, int, long int, long long int, float, or double or as a BOOL. It also defines a compare(_:) method to determine the ordering of two NSNumber objects.

Declaration


class NSNumber : NSValue

Read more on Apple's Official Guide: https://developer.apple.com/documentation/foundation/nsnumber

NumberFormatter

A formatter that converts between numeric values and their textual representations.

Declaration


class NumberFormatter : Formatter

Instances of NumberFormatter format the textual representation of cells that contain NSNumber objects and convert textual representations of numeric values into NSNumber objects. The representation encompasses integers, floats, and doubles; floats and doubles can be formatted to a specified decimal position. NumberFormatter objects can also impose ranges on the numeric values cells can accept.

Read more on Apple's Official Guide: https://developer.apple.com/documentation/foundation/numberformatter

How to use those claases to print currency symbol?

Let's look at this example:


let price = 12.34 as NSNumber
let formatter = NumberFormatter()

formatter.numberStyle = .currency
print(formatter.string(from: price)!)

The primary purpose of the NSNumber class is to allow the storage of primitive numerical data in the form of an object. The NSNumber class is able to store signed and unsigned char, short, integer, int, long and long long data types and also float, double and Bool values.

Also, When we display a number in Swift in Float, Double, or Int, it will display the numbers without grouping separators. So, by default 9,992,098.0 will be displayed as 9992098.0. S, we need to use the NumberFormatter (NSNumberFormatter in older Swift) class to convert your number into a formatted String for a text field.

To display currency, we will need to show the currency symbol ($, €, ¥, £) for the current locale and for that we use NSNumberFormatter, which is now NumberFormatter class.

Finally, formatter.numberStyle = .currency converts the styles into currency style. We can use .numberStyle to show decimal, scientific and many more styles as well but all we need is currency style right now.

Now, the example above is going to display the default currency format (USD).


//Output

$12.34

If we want to display currency in whole number, we can use this:


formatter.locale = Locale(identifier: "es_CL")
print(formatter.string(from: price)!)

//Output

$12

We can also define other currency symbol. For example, let's display Indian Rupee symbol.


formatter.locale = Locale(identifier: "brx_IN")
print(formatter.string(from: price)!)

//Output

₹ 12.34

We can actually display the whole currency in Indian language:


formatter.locale = Locale(identifier: "bn_IN")
print(formatter.string(from: price)!)

//Output

১২.৩৪₹

Here is the full list of iOS Locale Identifiers on Github: https://gist.github.com/st3fan/18f95c9c51de4e8df0302aac8eaa58ae

dreamhost

Leave a Reply

Most Read

#1 How to check if radio button is checked or not using JavaScript? #2 How to set opacity or transparency using CSS? #3 Pagination in CSS with multiple examples #4 How to make HTML form interactive and using CSS? #5 Solution to “TypeError: ‘x’ is not iterable” in Angular 9 #6 How to uninstall Cocoapods from the Mac OS?

Recently Posted

Mar 3 How to embed YouTube or other video links in WordPress? Mar 3 How to change the Login Logo in WordPress? Mar 3 substring() Method in JavaScript Mar 3 Window setInterval() Method in JavaScript Mar 2 How to zoom an element on hover using CSS? Mar 2 the box-sizing property in CSS

You might also like these

How to change perception and behavior of a person for acceptance of new systems?MiscWhat are CSS Specificity Rules and how does browser apply them?CSSAll possible ways you can Insert Data in PostgresPostgresEXISTS and NOT EXISTS in PostgresPostgres5 Key Principles Of Good Website UsabilityUI/UXThe difference between 400(4xx) and 500(5xx) errorsMisc