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

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

为什么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

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.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...