【问题标题】:Ruby .ceil and .floorRuby .ceil 和 .floor
【发布时间】:2017-02-19 16:12:21
【问题描述】:

我是 Ruby 新手,我试图弄清楚 ceilfloor 是如何工作的,因为当使用小数或小数时我得到不同的答案(类似的值)。以下是我尝试过的:

puts 8/3.ceil == 2   #=> true
puts 8/3.floor == 2  #=> true
puts 2.67.ceil == 2  #=> false
puts 2.67.floor == 2 #=> true

据我了解,ceil 应该返回一个更高的数字,floor 是一个更低的数字。希望有人能启发我。谢谢! :)

【问题讨论】:

    标签: ruby math floor ceil


    【解决方案1】:

    一切都正确返回。

    puts 8/3.ceil == 2
    #=> true, because 8/3 returns an Integer, 2
    puts 8/3.floor == 2
    #=> true, because 8/3 returns an Integer, 2
    puts 2.67.ceil == 2
    #=> false, because 2.67.ceil is 3
    puts 2.67.floor == 2
    #=> true, because 2.67.floor is 2
    

    为了让这里的事情更有意义,您可以将结果转换为浮点数:

    (8.to_f / 3).ceil == 2  #=> false
    (8.to_f / 3).floor == 2 #=> true
    2.67.ceil == 2          #=> false
    2.67.floor == 2         #=> true
    

    要记住的另一件事,写8/3.ceil 实际上是8 / (3.ceil),因为. 的绑定比/ 强。 (谢谢@tadman

    还有一点要提一下,(谢谢@Stefan):

    还有fdiv 来执行浮点除法,即 8.fdiv(3).ceil。并且 Ruby 还带有一个不错的 Rational 类:(8/3r).ceil

    【讨论】:

    • 另外值得一提的是8/3.floor实际上是8/(3.floor),因为.的绑定比/强。
    • 啊,好吧!所以对于第一行,它实际上是先做 3.ceil,得到 3,然后是 8/3 的整数除法,这就是为什么它是 2(真)而不是像第 3 行那样的 3(假)。如果我错了,请纠正我:)
    • @misokuan it's actually doing 3.ceil first, resulting in 3, and then an integer division of 8/3, which is why it's 2 是的,没错。
    • 还有fdiv进行浮点除法,即8.fdiv(3).ceil。并且 Ruby 还带有一个不错的 Rational 类:(8/3r).ceil
    • techotopia.com/index.php/Ruby_Operator_Precedence 优先规则总是讲述神秘计算的故事。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多