golang – 像PHP一样的ceil函数吗?

huangapple go评论109阅读模式
英文:

golang - ceil function like 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)
    // 输出为4而不是5
}

链接:http://golang.org/pkg/math/#Ceil

链接:http://play.golang.org/p/asHta1HkO_

有什么问题吗?
谢谢。

英文:

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.

答案1

得分: 59

将代码中的这一行:

d := float64(length / pagesize)

修改为:

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

这样做的目的是将除法的结果转换为浮点数。由于除法本身是整数除法,结果为4,所以d = 4.0,而math.Ceil(d)的结果是4。

使用修改后的代码,你将得到d=4.3int(math.Ceil(d))=5

英文:

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.

答案2

得分: 14

避免浮点运算(以提高性能和清晰度):

x, y := 长度, 页面大小
q := (x + y - 1) / y;

对于 x >= 0y > 0

或者为了避免 x+y 溢出:

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

这与 C++ 版本相同:https://stackoverflow.com/questions/2745074/fast-ceiling-of-an-integer-division-in-c-c

英文:

Avoiding floating point operations (for performance and clarity):

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

for x >= 0 and y > 0.

Or to avoid overflow of x+y:

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

It's the same as the C++ version: https://stackoverflow.com/questions/2745074/fast-ceiling-of-an-integer-division-in-c-c

答案3

得分: 13

将长度和页面大小转换为浮点数后再进行除法运算:

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

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

英文:

Convert length and pagesize to floats before the division:

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

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

答案4

得分: 4

你可以检查余数,看是否应该将其提升为下一个整数。

page := length / pagesize
如果 length % pagesize > 0 {
page++
}

英文:

You can check the remainder to see if it should be raised to the next integer.

page := length / pagesize
if length % pagesize > 0 {
    page++
}

huangapple
  • 本文由 发表于 2013年11月10日 22:35:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/19890935.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定