为什么在Ruby中划分后负数会向下舍入?

got*_*tqn 7 ruby rounding divmod

我正在查看关于divmod的文档.表示方法之间的差别的表的一部分div,divmod,modulo,和remainder显示如下:

在此输入图像描述

为什么要13.div(-4)舍入-4而不是-3?Ruby中是否有任何规则或惯例来舍入负数?如果是这样,为什么以下代码没有四舍五入?

-3.25.round()  #3
Run Code Online (Sandbox Code Playgroud)

Nei*_*ter 6

13.div(-4) == -413.modulo(-4) == -3使

(-4 * -4) + -3 == 13
Run Code Online (Sandbox Code Playgroud)

而且你得到了一致的关系

(b * (a/b)) + a.modulo(b) == a
Run Code Online (Sandbox Code Playgroud)

为什么13.div(-4)四舍五入到-4而不是-3?

这是一种误解.13.div(-4)是不是真的四舍五入在所有.它是整数除法,遵循用于处理整数和模运算的自洽规则.链接中描述的舍入逻辑适合它,然后divmod在一个或两个参数为Floats 时处理相同的操作时一致地应用.对于负数或分数的数学运算通常以这种方式从正整数的更简单,更直观的结果扩展.例如,这遵循与正整数变体如何创建分数和负幂或非整数因子的类似逻辑.

在这种情况下,一切都是关于自我一致性divmod,而不是一般的四舍五入.

Ruby的设计师在处理负数时可以选择,而不是所有语言都会给出相同的结果.但是,一旦确定Ruby将返回与除数匹配的模数结果的符号(而不是将除法作为整体匹配),则设置其余数字的工作方式.

Ruby中是否有任何规则或惯例来舍入负数?

是.舍入浮点数意味着返回数字上最接近的整数.当有两个同样接近的整数时,Ruby会舍入到最远为0的整数.这是完全分开和模运算方法工作的完全独立的设计决策.

如果是这样,为什么以下代码没有四舍五入? -3.25.round() #3

我认为你的意思是要阅读的结果-3.圆形方法不会"向下舍入".它确实"最接近".-3是最接近的整数-3.25.Ruby的设计师不得不做出选择,但该怎么办-3.5.round() # -4.当舍入该数字时,某些语言将返回-3.