为什么Ruby的Fixnum#/方法在另一个Fixnum上被调用时向下舍入?

时间:2012-09-28 13:39:03

标签: ruby

好的,那有什么用呢?

irb(main):001:0> 4/3
=> 1
irb(main):002:0> 7/8
=> 0
irb(main):003:0> 5/2
=> 2

我意识到Ruby在这里进行整数除法,但为什么呢?有了像Ruby一样灵活的语言,为什么不能5/2返回5/2的实际数学结果?我错过了整数除法的常见用法吗?在我看来,让7/8返回0会导致更多的混乱,而不是任何可能来自它的好处是值得的。 Ruby有没有真正的理由呢?

1 个答案:

答案 0 :(得分:4)

因为创作中的大多数语言(甚至是高级/高级语言)都可以吗?您将在C,C ++,Java,Perl,Python中对整数执行相同的行为...这是Euclidian Division(因此相应的模%运算符)。

整数除法运算甚至在许多架构上的硬件级别实现。 Others已经提出了这个问题,其中一个原因是syme​​try:在静态类型语言中,例如see,这允许所有整数运算返回整数,而不会损失精度。它还允许轻松访问相应的低级汇编程序操作,因为C被设计为一种扩展层。

此外,正如对链接文章的一篇评论中所解释的那样,浮点运算多年来代价高昂(或在所有架构上都不受支持),并且不需要诸如在固定批次中拆分数据集等流程。