英文:
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.3
和int(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 >= 0
和 y > 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)
答案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++
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论