在红宝石中不按位

Aen*_*Tan 2 javascript ruby math operators

我在JS中有一个使用按位NOT运算符的公式.

~~(n/m + 0.5) * m;
Run Code Online (Sandbox Code Playgroud)

如何在ruby中编写相同的表达式?ruby中没有按位NOT运算符.

tia*_*ldt 6

这不会有帮助吗?http://www.techotopia.com/index.php/Ruby_Operators#Ruby_Bitwise_Operators

〜按位NOT(补语)

  • 虽然回答确切的问题总是好的,但是看一眼根本问题也总是一个好主意...... (3认同)

Dig*_*oss 6

我相信Ruby中的相同表达式可能是(n/m + 0.5).to_i * m,或者Integer(n/m + 0.5) * m.

看起来像加倍的按位补码实际上用于截断计算的小数部分,以便计算最接近的n,使得nm的倍数.(在另一种语言中,我会说"转换为整数",但Javascript具有统一的算术类型.)

更新: MladenJablanović建议演员,是的,如果mn都是Fixnum,那就需要了.在Ruby中,1/30但在JS中它是0.333 ...... 这是一个精致的建议:

(n.to_f / m).round * m
Run Code Online (Sandbox Code Playgroud)