首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将负整数商舍入到负无穷大

问将负整数商舍入到负无穷大
EN

Stack Overflow用户
提问于 2014-09-16 11:36:36
回答 3查看 990关注 0票数 7

Swift中的整数除法似乎是向零取整,而不是向较低的数字取整。例如,这意味着-1 / 2将是0而不是-1。

有没有办法告诉Swift四舍五入到更低的数字?我知道如何“模拟”它,但如果有本机解决方案,我更愿意使用它。

EN

回答 3

Stack Overflow用户

发布于 2014-09-16 13:23:36

您可以像这样定义自己的运算符:

代码语言:javascript
复制
infix operator </> { associativity left }
func </> (a: Int, b: Int) -> Int {
    return Int(floor(Double(a) / Double(b)))
}

这样你就不需要输入这个荒谬的表达式了。我建议使用</>,当然你也可以选择你自己的。

如果你不喜欢创建运算符,那就把它当做一个普通函数来使用:

代码语言:javascript
复制
func div (a: Int, b: Int) -> Int {
    return Int(floor(Double(a) / Double(b)))
}

最后,但我个人不会使用它,你可以重新定义除法运算符

代码语言:javascript
复制
func / (a: Int, b: Int) -> Int {
    return Int(floor(Double(a) / Double(b)))
}

在这种情况下,它将适用于所有部门-但要注意副作用

票数 1
EN

Stack Overflow用户

发布于 2014-09-16 11:40:58

floor函数向下舍入,所以如果你使用floor(Float(a)/Float(b)),它应该可以工作。

票数 0
EN

Stack Overflow用户

发布于 2014-09-16 14:08:22

我的备份解决方案涉及一个新的operator -/。数学计算不涉及在双精度和整数之间来回洗牌,这避免了一些具有非常大数字的边缘情况。另一方面,如果denominator和numerator都是非常大的负数,这可能会溢出,并且我不确定如果denominator是负数会发生什么。

代码语言:javascript
复制
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函数,并使用它实现运算符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25860268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档