Swift中的整数除法似乎是向零取整,而不是向较低的数字取整。例如,这意味着-1 / 2将是0而不是-1。
有没有办法告诉Swift四舍五入到更低的数字?我知道如何“模拟”它,但如果有本机解决方案,我更愿意使用它。
发布于 2014-09-16 13:23:36
您可以像这样定义自己的运算符:
infix operator </> { associativity left }
func </> (a: Int, b: Int) -> Int {
return Int(floor(Double(a) / Double(b)))
}这样你就不需要输入这个荒谬的表达式了。我建议使用</>,当然你也可以选择你自己的。
如果你不喜欢创建运算符,那就把它当做一个普通函数来使用:
func div (a: Int, b: Int) -> Int {
return Int(floor(Double(a) / Double(b)))
}最后,但我个人不会使用它,你可以重新定义除法运算符
func / (a: Int, b: Int) -> Int {
return Int(floor(Double(a) / Double(b)))
}在这种情况下,它将适用于所有部门-但要注意副作用
发布于 2014-09-16 11:40:58
floor函数向下舍入,所以如果你使用floor(Float(a)/Float(b)),它应该可以工作。
发布于 2014-09-16 14:08:22
我的备份解决方案涉及一个新的operator -/。数学计算不涉及在双精度和整数之间来回洗牌,这避免了一些具有非常大数字的边缘情况。另一方面,如果denominator和numerator都是非常大的负数,这可能会溢出,并且我不确定如果denominator是负数会发生什么。
infix operator -/ {
precedence 150
associativity left
}
func -/ (numerator: Int, denominator: Int) -> Int {
if numerator < 0 {
return (numerator - (denominator - 1)) / denominator
}
return numerator / denominator
}如果你想模仿C语言的行为,任何用Swift编写的解决方案都可能以它的问题而告终。另一种可能是在桥接头中包含一个微小的divide函数,并使用它实现运算符。
https://stackoverflow.com/questions/25860268
复制相似问题