我想返回大于或等于整数除法的最小整数值.所以我用过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
}
Run Code Online (Sandbox Code Playgroud)
http://golang.org/pkg/math/#Ceil
http://play.golang.org/p/asHta1HkO_
怎么了?谢谢.
dam*_*ois 38
这条线
d := float64(length / pagesize)
Run Code Online (Sandbox Code Playgroud)
转换为浮动分割的结果.由于除法本身是整数除法,因此得到4,所以d = 4.0并且math.Ceil(d)是4.
替换为
d := float64(length) / float64(pagesize)
Run Code Online (Sandbox Code Playgroud)
而且你会拥有d=4.3和int(math.Ceil(d))=5.
在分割之前将长度和页面大小转换为浮点数:
d := float64(length) / float64(pagesize)
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/FKWeIj7of5
避免浮点运算(为了性能和清晰度):
x, y := length, pagesize
q := (x + y - 1) / y;
Run Code Online (Sandbox Code Playgroud)
对于x >= 0和y > 0。
或者为了避免溢出x+y:
q := 1 + (x - 1) / y
Run Code Online (Sandbox Code Playgroud)
与 C++ 版本相同:C/C++ 中整数除法的快速上限
您可以检查余数以查看是否应将其提升到下一个整数。
page := length / pagesize
if length % pagesize > 0 {
page++
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13162 次 |
| 最近记录: |