Ever want to show a price number nicely like "21.58" instead of "21.58223" after applying tax or discount?
We can turn 21.58223 to 21.58 by rounding up or down using NumberFormatter class as below :
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
// minimum decimal digit, eg: to display 2 as 2.00
formatter.minimumFractionDigits = 2
// maximum decimal digit, eg: to display 2.5021 as 2.50
formatter.maximumFractionDigits = 2
// round up 21.586 to 21.59. But doesn't round up 21.582, making it 21.58
formatter.roundingMode = .halfUp
let price = 21.58223
let roundedPriceString = formatter.string(for: price)
// output "rounded price is 21.58"
print("rounded price is \(roundedPriceString!)")
We will first create a NumberFormatter instance and configure its options as shown above.
Then we will convert the original number into rounded output string using .string(for: ) method, this will convert the input number into a string using the format options specified.
You can configure the .roundingMode to .up
, .down
, .halfUp
and etc .
.up
will add 1 to the maximum decimal digits if it has any decimal after the maxmium decimal digits, eg: 2.120001 to 2.13
.down
will ignore and cut off the decimals after the maximum decimal digits, eg: 2.12999 to 2.12
.halfUp
will add 1 to the maximum decimal digits if the decimals after the maximum decimal digits is more than half of the value. eg: 21.5864 to 21.59, 21.585 to 21.59, but 21.5821 to 21.58