Round double value with n number decimal places in the swift example
It is a common requirement to display prices and orders with a limit of 3 decimal places.
This tutorial explains how to round double values to limit decimal places.
There are multiple ways we can limit decimal places.
For example, If the input is 123.456789, the output is 123.456.
How to round double values to limit decimal or fraction parts in Swift?
Following are ways to round double fractional parts
- NumberFormatter class
NumberFormatter class provides to format and rounding the numbers.
It is mainly used to add grouping and limit and rounding fractional parts of numeric types Configure NumberFormatter class to the below values
numberStyleto NumberFormatter.Style.decimalroundingModetoNumberFormatter.RoundingMode.floorthat converts the number to less than give decimal partsmaximumFractionDigitsto integer to limit decimal parts.
Finally, call the string method with from values and returns the rounded numbers in the Optional object.
Here is an example code
import Foundation
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = NumberFormatter.Style.decimal
numberFormatter.roundingMode = NumberFormatter.RoundingMode.floor
numberFormatter.maximumFractionDigits = 2
let result1 = numberFormatter.string(from: 123456.17213)
let result2 = numberFormatter.string(from: 090.17872134)
print(String(describing: result1))
print(String(describing: result2))
Output:
Optional("123,456.17")
Optional("90.17")
using String Format
Another way using the String Format method.
It is a simple way of using Foundation String where String is a wrapper class for NSString. %.3f limit the value to 3 digits. Here is an example code
import Foundation
let value: Double = 3123.11231231231231
print(String(format:"%.3f", value))
Output:
3123.112
NSDecimalNumber rounding class
NSDecimalNumber has a rounding method that returns rounding of a decimal part of a number
Here is a syntax
func rounding(accordingToBehavior behavior: NSDecimalNumberBehaviors?) -> NSDecimalNumber
NSDecimalNumberBehaviors is a parameter to the rounding method. Which can be created using NSDecimalNumberHandler with scale parameter.
Here is an example
import Foundation
let limitFranction: Int16 = 2
let handler = NSDecimalNumberHandler(roundingMode: .plain, scale: limitFranction, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: true)
let result = NSDecimalNumber(value: 3123.11231231231231).rounding(accordingToBehavior: handler)
print(result)
Output:
3123.11
