Reputation: 7537
While playing around, I found the round() function in swift. It can be used as below:
round(0.8)
Which will return 1, as expected. Here's my question:
how do I round by thousandths in swift?
I want to be able to plug in a number, say 0.6849, and get 0.685 back. How does round() do this? Or, does it not, in which case, what function does?
Upvotes: 53
Views: 91102
Reputation: 21
var a=1.2344
var b:String = String(format: "%0.2f",a)
print(b)
Output:
1.23
The output you got is of string type. So, you need to convert into other types if needed. The below link tells you how to convert:
Upvotes: 2
Reputation: 129
Take a look at Apple's documentation for round()
and rounded(_:)
.
Upvotes: 1
Reputation: 512776
The round(someDecimal)
is the old C style. As of Swift 3, doubles and floats have a built in Swift function.
var x = 0.8
x.round() // x is 1.0 (rounds x in place)
or
var x = 0.8
var y = x.rounded() // y is 1.0, x is 0.8
See my answer fuller answer here (or here) for more details about how different rounding rules can be used.
As other answers have noted, if you want to round to the thousandth, then multiply temporarily by 1000
before you round.
Upvotes: 21
Reputation: 472
func round(value: Float, decimalPlaces: UInt) {
decimalValue = pow(10, decimalPlaces)
round(value * decimalValue) / decimalValue
}
…
func round(value: CGFloat, decimalPlaces: UInt)
func round(value: Double, decimalPlaces: UInt)
func roundf(value: Float, decimalPlaces: UInt)
Upvotes: 11
Reputation: 3084
This will round to any value not limited by powers of 10.
extension Double {
func roundToNearestValue(value: Double) -> Double {
let remainder = self % value
let shouldRoundUp = remainder >= value/2 ? true : false
let multiple = floor(self / value)
let returnValue = !shouldRoundUp ? value * multiple : value * multiple + value
return returnValue
}
}
Upvotes: 3
Reputation: 69787
Here's one way to do it. You could easily do this for Float
, or probably make it generic so it's for any of those.
public extension CGFloat {
func roundToDecimals(decimals: Int = 2) -> CGFloat {
let multiplier = CGFloat(10^decimals)
return round(multiplier * self) / multiplier
}
}
Upvotes: 4