【发布时间】:2015-01-26 11:40:27
【问题描述】:
我想将一个整数四舍五入到最接近的 3 的倍数。 示例:
var numberOne = 2
var numberTwo = 7
- numberOne 向上取整等于 3
- numberTwo 向上取整等于 9
我不想让它四舍五入。
有什么想法吗? 谢谢
【问题讨论】:
我想将一个整数四舍五入到最接近的 3 的倍数。 示例:
var numberOne = 2
var numberTwo = 7
我不想让它四舍五入。
有什么想法吗? 谢谢
【问题讨论】:
我在操场上得到了这个:
import Foundation
func roundToThree(value: Int) -> Int{
var fractionNum = Double(value) / 3.0
let roundedNum = Int(ceil(fractionNum))
return roundedNum * 3
}
roundToThree(2)
roundToThree(7)
【讨论】:
我是这样实现的:
func roundUp(value: Int, divisor: Int) -> Int {
let modulo = value % divisor
var multiplier = value / divisor
if modulo > 0 {
++multiplier
}
return divisor * multiplier
}
函数计算:
仅使用整数,该算法应该比其他基于浮点计算的算法更快。
我将除数设置为参数,您可以选择将其删除并在函数体中将其替换为 3 文字,或为其分配默认值:
func roundUp(value: Int, divisor: Int = 3) -> Int
【讨论】:
modulo,但手指更了解modules。名称已修复,谢谢!
我的 2 克拉:
func roundUp(value: Int, divisor: Int) -> Int {
let rem = value % divisor
return rem == 0 ? value : value + divisor - rem
}
【讨论】:
带有可配置乘数的 swift3 Float 扩展(改编自 @erdekhayser 接受的答案)
extension Float {
func roundUpTo(multiplier: Int) -> Int{
let fractionNum = self / Float(multiplier)
return Int(ceil(fractionNum)) * multiplier
}
}
【讨论】:
这就像 Martin R 的答案,但通过四舍五入到最接近的倍数而不是四舍五入来工作
斯威夫特 3/4
func roundUp(value: Double, divisor: Double) -> Double {
let rem = value.truncatingRemainder(dividingBy: divisor)
if(rem >= divisor / 2)
{
return rem == 0 ? value : value + divisor - rem
}
else
{
return rem == 0 ? value : value - rem
}
}
【讨论】:
Int,编译器很可能会生成相同的代码。