为什么13.div(-4)舍入到-4而不是-3? Ruby中是否有任何规则或惯例来舍入负数?如果是这样,为什么下面的代码没有四舍五入?
-3.25.round() #3
解决方法
(-4 * -4) + -3 == 13
并且你得到了一致的关系
(b * (a/b)) + a.modulo(b) == a
Why is 13.div(-4) rounded to -4 and not to -3?
这是一种误解. 13.div(-4)根本不是圆形的.它是整数除法,遵循用于处理整数和模运算的自洽规则. your link中描述的舍入逻辑适合它,然后在一个或两个参数为浮点数时处理相同的divmod操作时应用一致.对于负数或分数的数学运算通常以这种方式从正整数的更简单,更直观的结果扩展.例如.这遵循类似的逻辑,如何从正整数变量创建分数和负幂,或非整数阶乘.
在这种情况下,它只是关于divmod的自我一致性,而不是关于一般的舍入.
Ruby的设计师在处理负数时可以选择,而不是所有语言都会给出相同的结果.但是,一旦确定Ruby将返回与除数匹配的模数结果的符号(而不是将除法作为整体匹配),则设置其余数字的工作方式.
Is there any rule or convention in Ruby to round down negative numbers?
是.舍入浮点数意味着返回数值上最接近的整数.当有两个同样接近的整数时,Ruby会舍入到最远为0的整数.这是完全分开和模运算方法工作的完全独立的设计决策.
If so,why is the following code not rounding down?
-3.25.round() #3
我猜你的意思是读-3的结果.圆形方法不会“向下舍入”.它确实“最接近”. -3是-3.25的最接近整数. Ruby的设计师确实必须做出选择,如何处理-3.5.round()#-4.当舍入该数字时,某些语言将返回-3.