朱莉娅:ceil/floor可以返回整数吗?

8
为什么ceil()floor()不返回整数?如何返回整数?
a = 10
b = 3
typeof(a/b)
  ## Float64

c = ceil(a/b)
typeof(c)
  ## Float64

在计算范围时,这个问题让我苦恼不已,例如:

k = 0:1:c
  ## 0.0:1.0:4.0
typeof(k)
  ## StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}

完全公开:我认为我有一个答案,所以我将回答自己的问题,但如果你有更好的答案,请发表回答。希望下次有人查找时可以在这里轻松找到答案。


4
对于这个具体情况,需要考虑的一件事是Julia提供了clddivfld函数来仅使用整数运算计算ceil(Int, a/b)round(Int, a/b)floor(Int, a/b),这可能更快且不会遇到舍入问题。 - Oscar Smith
3
你还可以使用 ÷ 符号(输入 \div 然后按 Tab 键)来进行整数除法。 - 张实唯
很高兴认识Oscar和张实唯。随意添加答案,或者我可以将信息添加到我的答案中,视您的喜好而定。谢谢。 - PatrickT
1个回答

12

有时候你希望ceil()floor()返回的不是整数,比如InfNaN。不过,你可以像这样返回一个整数:

julia> c = ceil(Int64, a/b)
julia> typeof(c)
Int64 

julia> k = 0:1:c
0:1:4

julia> typeof(k)
StepRange{Int64, Int64}

请查看文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接