golang - ceil函数就像php一样?

时间:2013-11-10 14:35:33

标签: go ceil

我想返回大于或等于整数除法的最小整数值。所以我使用math.ceil,但无法获得我想要的值。

package main

import (
    "fmt"
    "math"
)

func main() {
    var pagesize int = 10
    var length  int = 43

    d := float64(length / pagesize)
    page := int(math.Ceil(d))

    fmt.Println(page)
    // output 4 not 5
}

http://golang.org/pkg/math/#Ceil

http://play.golang.org/p/asHta1HkO_

有什么问题? 感谢。

4 个答案:

答案 0 :(得分:32)

该行

d := float64(length / pagesize)

转换为浮动除法的结果。由于除法本身是整数除法,因此得到4,因此d = 4.0且math.Ceil(d)为4。

替换该行
d := float64(length) / float64(pagesize)

您将拥有d=4.3int(math.Ceil(d))=5

答案 1 :(得分:9)

在分割之前将长度和页面大小转换为浮点数:

d := float64(length) / float64(pagesize)

http://play.golang.org/p/FKWeIj7of5

答案 2 :(得分:2)

请注意,您可以使用

x, y := length, pagesize
q := (x + y - 1) / y;

x >= 0y > 0。这也将很快。

或者为避免x+y溢出:

q := 1 + ((x - 1) / y)

与C ++版本相同:Fast ceiling of an integer division in C / C++

答案 3 :(得分:0)

您可以检查余数,以查看是否应将其提高到下一个整数。

COOKS=32
XDG_SESSION_ID=889
SHELL=/bin/bash
....