整数除算以上の最小の整数値を返したい。そのため、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_
なにが問題ですか?ありがとう。
この線
_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
があります。
分割前に長さとページサイズを浮動小数点数に変換します。
d := float64(length) / float64(pagesize)
使用できることに注意してください
x, y := length, pagesize
q := (x + y - 1) / y;
x >= 0
およびy > 0
の場合。また、非常に高速になります。
または、x+y
のオーバーフローを回避するには:
q := 1 + (x - 1) / y
これはC++バージョンと同じです: C/C++での整数除算の高速上限
余りをチェックして、次の整数に上げる必要があるかどうかを確認できます。
page := length / pagesize
if length % pagesize > 0 {
page++
}