具有返回商和余数的除法

时间:2017-05-12 20:04:34

标签: go

我尝试从Python迁移到Golang。我目前正在研究一些数学运算,并想知道如何通过除法得到商和余值。我将在下面分享相当于Python的代码。

hours, remainder = divmod(5566, 3600)
minutes, seconds = divmod(remainder, 60)
print('%s:%s' % (minutes, seconds))
# 32:46

以上将是我的目标。感谢。

3 个答案:

答案 0 :(得分:17)

整数除法加模数实现了这一点。

func divmod(numerator, denominator int64) (quotient, remainder int64) {
    quotient = numerator / denominator // integer division, decimals are truncated
    remainder = numerator % denominator
    return
}

https://play.golang.org/p/rimqraYE2B

编辑:定义

商数,在整数除法的上下文中,是分子进入分母的整数次数。换句话说,它与十进制语句相同:FLOOR(n/d)

Modulo 为您提供此类分组的余数。分子和分母的模数将始终在0和d-1之间(其中d是分母)

答案 1 :(得分:4)

如果您想要单线,

quotient, remainder := numerator/denominator, numerator%denominator

答案 2 :(得分:0)

如果您有一个 32 位数字,您可以使用以下其中之一:

package main
import "math/bits"

func main() {
   { // example 1
      var n uint = 4294967295
      q, r := bits.Div(0, n, 2)
      println(q == n / 2, r == 1)
   }
   { // example 2
      var n uint32 = 4294967295
      q, r := bits.Div32(0, n, 2)
      println(q == n / 2, r == 1)
   }
}

如果你有一个 64 位的数字,你可以这样做:

package main
import "math/bits"

func main() {
   var n uint64 = 18446744073709551615
   q, r := bits.Div64(0, n, 2)
   println(q == n / 2, r == 1)
}

如果你有大于 64 位的东西,你可以这样做:

package main
import "math/bits"

func main() {
   q, r := bits.Div64(1, 0, 2)
   println(q == 9223372036854775808, r == 0)
}