为什么在Ruby中除法后负数向下舍入?
我正在查阅一份有关的文档。显示方法为什么在Ruby中除法后负数向下舍入?,ruby,rounding,divmod,Ruby,Rounding,Divmod,我正在查阅一份有关的文档。显示方法div、divmod、modulo和余数之间差异的部分表格如下所示: 为什么13.div(-4)四舍五入到-4而不是-3?Ruby中是否有任何规则或惯例将负数取整?如果是,为什么下面的代码没有舍入 -3.25.round() #3 13.div(-4)==-4和13.modulo(-4)==-3,以便 (-4 * -4) + -3 == 13 你得到了一致的关系 (b * (a/b)) + a.modulo(b) == a 为什么13.div(-4)
div
、divmod
、modulo
和余数
之间差异的部分表格如下所示:
为什么13.div(-4)
四舍五入到-4
而不是-3
?Ruby中是否有任何规则或惯例将负数取整?如果是,为什么下面的代码没有舍入
-3.25.round() #3
13.div(-4)==-4
和13.modulo(-4)==-3
,以便
(-4 * -4) + -3 == 13
你得到了一致的关系
(b * (a/b)) + a.modulo(b) == a
为什么13.div(-4)四舍五入到-4而不是-3 这是一种误解<代码>13。div(-4)根本不是四舍五入。它是整数除法,并遵循处理整数和模运算的自洽规则。中描述的舍入逻辑与之匹配,然后在处理相同的
divmod
操作时,当一个或两个参数均为Float
s时,将一致地应用舍入逻辑。负数或分数的数学运算通常以这种方式从更简单、更直观的正整数结果扩展而来。例如,这遵循的逻辑与从正整数变量创建分数和负幂或非整数阶乘的逻辑相似
在本例中,所有内容都是关于divmod
的自一致性,而不是关于一般的舍入
Ruby的设计师在处理负数时有一个选择,不是所有语言都能给出相同的结果。然而,一旦确定Ruby将返回与除数匹配的模结果符号(与整体匹配除数相反),这将设置其余数字的工作方式
Ruby中是否有任何规则或惯例将负数取整
对。四舍五入浮点数意味着返回数值最接近的整数。当有两个相等接近的整数时,Ruby将舍入距离0最远的整数。这与整数除法和模算术方法的工作原理完全不同
如果是,为什么下面的代码没有舍入<代码>-3.25.round()#3
我想你指的是读取
-3
的结果。舍入方法不“向下舍入”。它是“最接近的圆”-3
是与-3.25
最接近的整数。不过Ruby的设计师们不得不做出选择,如何处理-3.5.round()#-4
。有些语言在舍入该数字时会返回-3。+1。也许值得一提的是,在ruby中,模运算符返回与除数相同的符号。我已经写下了模方法(x.modulo(y)表示x-y*(x/y).floor),并且也理解了它。但是为什么13.div(-4)不是-3,因为13/-4=-3.25?正如我在文档中看到的,div方法“使用/执行除法,然后将结果转换为整数。”。所以,我想,当结果是负数时,它被四舍五入到较小的数字。在我的例子中,-3.25可以四舍五入到-3或-4,-4更小,所以选择它。可能是这样吗?@gotqn:整数算术和浮点舍入并没有像你想象的那样直接联系在一起。浮点(或有理)舍入实际上有不同的选择,在编程语言中实现不同的自一致性行为。并非所有语言都以相同的方式实现整数除法或舍入。我将尝试添加更多细节来回答这个问题。从表的右上方开始:“商被四舍五入到-无穷大”