我有一段使用位运算符 NOT 的 JS 公式。
~~(n/m + 0.5) * m;
如何在Ruby中编写相同的表达式?Ruby中没有位非运算符。
我有一段使用位运算符 NOT 的 JS 公式。
~~(n/m + 0.5) * m;
如何在Ruby中编写相同的表达式?Ruby中没有位非运算符。
(n/m + 0.5).to_i * m
或者Integer(n/m + 0.5) * m
。看起来双重位求反运算符确实被用来截取计算中的小数部分,以便计算最接近n且是m的倍数的值。(在其他语言中,我会说“转换为整数”,但Javascript有一个统一的算术类型。)更新:Mladen Jablanović建议进行数据类型转换,如果m和n都是Fixnum,则需要进行数据类型转换。在Ruby中,1/3是0,但在JS中是0.333...。以下是一个更完善的建议:(n.to_f / m).round * m
(n/m + 0.5).to_i
可以写成(n/m).ceil
。此外,n和m都可以是整数,因此在除法之前将它们中的一个转换为浮点数可能是明智的选择。 - Mladen Jablanović.ceil
,它总是会向上舍入。那么 .round
呢? - DigitalRoss+0.5
也可以用来进行四舍五入,不是吗? - Mladen Jablanović