我尝试从Python迁移到Golang。我目前正在研究一些数学运算,并想知道如何通过除法得到商和余值。我将在下面分享相当于Python的代码。
hours, remainder = divmod(5566, 3600)
minutes, seconds = divmod(remainder, 60)
print('%s:%s' % (minutes, seconds))
# 32:46
以上将是我的目标。感谢。
答案 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)
}