Golang - функция ceil как php?
Я хочу вернуть наименьшее целочисленное значение, большее или равное целочисленному делению. Поэтому я использовал 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_
Что не так?
Спасибо.
Ответы
Ответ 1
Линия
d := float64(length / pagesize)
преобразует, чтобы поплавать результат деления. Поскольку само разбиение является целым делением, оно приводит к 4, поэтому d = 4.0 и math.Ceil(d)
равно 4.
Замените строку на
d := float64(length) / float64(pagesize)
и у вас будут d=4.3
и int(math.Ceil(d))=5
.
Ответ 2
Преобразовать длину и размер листа в поплавки перед делением:
d := float64(length) / float64(pagesize)
http://play.golang.org/p/FKWeIj7of5
Ответ 3
Обратите внимание, что вы можете использовать
x, y := length, pagesize
q := (x + y - 1) / y;
для x >= 0
и y > 0
. Это также будет очень быстро.
Или чтобы избежать переполнения x+y
:
q := 1 + (x - 1) / y
То же, что и версия C++: Быстрый потолок целочисленного деления в C/C++
Ответ 4
Вы можете проверить остаток, чтобы увидеть, должно ли оно быть увеличено до следующего целого числа.
page := length / pagesize
if length % pagesize > 0 {
page++
}