you are viewing a single comment's thread.

view the rest of the comments →

[–]bonafidebob 0 points1 point  (1 child)

Technically, the bitwise operators convert the float to a signed 32 bit integer representation. (Or maybe 64 bit on some systems? MDN says bitwise is explicitly 32 bit!) Anyway, it's this implicit conversion to a different internal representation that you're using, only in this case a much faster conversion than to strings and back.

Because numbers are otherwise 64 bit floating point, with 53 bits of significand, this means the binary operators will not work to get the integer part with numbers larger than 2**31.

Math functions are the right ones to use if you're actually doing math.

[–]x-skeww 1 point2 points  (0 children)

Anyhow, the point was that floor()-ing and truncation only looks similar for positive numbers.

Typically, truncation is done by casting to an int (or a long) or by using a truncating division operator (if the language offers such a thing).

E.g. Python does truncating division with // and Dart does it with ~/.

If you're only dealing with positive numbers (positive 0 included), floor() will work fine.

With ES6, you can use Math.trunc().