golang - ceil function like php?

leiyonglin picture leiyonglin · Nov 10, 2013 · Viewed 21.7k times · Source

I want to return the least integer value greater than or equal to integer division. So I used math.ceil, but can not get the value I want.

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_

What is wrong? Thanks.

Answer

damienfrancois picture damienfrancois · Nov 10, 2013

The line

d := float64(length / pagesize)

transforms to float the result of the division. Since the division itself is integer division, it results in 4, so d = 4.0 and math.Ceil(d) is 4.

Replace the line with

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

and you'll have d=4.3 and int(math.Ceil(d))=5.