25

我想返回大于或等于整数除法的最小整数值。所以我使用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

4 回答 4

51

线

d := float64(length / pagesize)

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

将行替换为

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

你会有d=4.3and int(math.Ceil(d))=5

于 2013-11-10T14:49:31.943 回答
13

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

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

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

于 2013-11-10T14:50:14.960 回答
9

避免浮点运算(为了性能和清晰度):

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

对于x >= 0y > 0

或避免溢出x+y

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

与C++版本相同:C/C++中整数除法的快速上限

于 2019-01-02T12:07:33.987 回答
3

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

page := length / pagesize
if length % pagesize > 0 {
    page++
}
于 2018-06-23T02:17:43.393 回答