我想将Double
四舍五入到最接近的10倍。
例如,如果数字是8.0,则舍入到10。 如果数字为2.0,则为0。
我该怎么做?
答案 0 :(得分:26)
您可以使用round()
函数(舍入浮点数
到最接近的整数值)并应用"比例因子" 10:
func roundToTens(x : Double) -> Int {
return 10 * Int(round(x / 10.0))
}
使用示例:
print(roundToTens(4.9)) // 0
print(roundToTens(15.1)) // 20
在第二个示例中,15.1
除以十(1.51
),四舍五入(2.0
),
转换为整数(2
)并再次乘以10(20
)。
斯威夫特3:
func roundToTens(_ x : Double) -> Int {
return 10 * Int((x / 10.0).rounded())
}
可替换地:
func roundToTens(_ x : Double) -> Int {
return 10 * lrint(x / 10.0)
}
答案 1 :(得分:7)
将舍入函数定义为
import Foundation
func round(_ value: Double, toNearest: Double) -> Double {
return round(value / toNearest) * toNearest
}
为您提供更加通用和灵活的方法
let r0 = round(1.27, toNearest: 0.25) // 1.25
let r1 = round(325, toNearest: 10) // 330.0
let r3 = round(.pi, toNearest: 0.0001) // 3.1416
答案 2 :(得分:1)
在Swift 3.0中它是
10 * Int(round(Double(ratio / 10)))
答案 3 :(得分:0)
swift中BinaryFloatingPoint的好扩展:
extension BinaryFloatingPoint{
func roundToTens() -> Int{
return 10 * Int(Darwin.round(self / 10.0))
}
func roundToHundreds() -> Int{
return 100 * Int(Darwin.round(self / 100.0))
}
}
答案 4 :(得分:0)
您还可以扩展FloatingPoint
协议,还可以添加一个选项来选择舍入规则:
extension FloatingPoint {
func rounded(to value: Self, roundingRule: FloatingPointRoundingRule = .toNearestOrAwayFromZero) -> Self {
return (self / value).rounded(roundingRule) * value
}
}
let value = 325.0
value.rounded(to: 10) // 330 (default rounding mode toNearestOrAwayFromZero)
value.rounded(to: 10, roundingRule: .down) // 320
答案 5 :(得分:0)
扩展到四舍五入到任何数字!
extension Int{
func rounding(nearest:Float) -> Int{
return Int(nearest * round(Float(self)/nearest))
}
}
答案 6 :(得分:0)
extension Double {
var roundToTens: Double {
let divideByTen = self / 10
let multiByTen = (ceil(divideByTen) * 10)
return multiByTen
}
}
用法: 36.roundToTens