This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
The Math.trunc() static method returns the integer part of a number by removing any fractional digits.
console.log(Math.trunc(13.37)); // Expected output: 13 console.log(Math.trunc(42.84)); // Expected output: 42 console.log(Math.trunc(0.123)); // Expected output: 0 console.log(Math.trunc(-0.123)); // Expected output: -0
Math.trunc(x)
xA number.
The integer part of x.
The way Math.trunc() works is more straightforward than the other three Math methods: Math.floor(), Math.ceil() and Math.round(); it truncates (cuts off) the dot and the digits to the right of it, no matter whether the argument is a positive or negative number.
Because trunc() is a static method of Math, you always use it as Math.trunc(), rather than as a method of a Math object you created (Math is not a constructor).
Math.trunc(-Infinity); // -Infinity
Math.trunc("-1.123"); // -1
Math.trunc(-0.123); // -0
Math.trunc(-0); // -0
Math.trunc(0); // 0
Math.trunc(0.123); // 0
Math.trunc(13.37); // 13
Math.trunc(42.84); // 42
Math.trunc(Infinity); // Infinity
Warning: This is not a polyfill for Math.trunc() because of non-negligible edge cases.
Bitwise operations convert their operands to 32-bit integers, which people have historically taken advantage of to truncate float-point numbers. Common techniques include:
const original = 3.14; const truncated1 = ~~original; // Double negation const truncated2 = original & -1; // Bitwise AND with -1 const truncated3 = original | 0; // Bitwise OR with 0 const truncated4 = original ^ 0; // Bitwise XOR with 0 const truncated5 = original >> 0; // Bitwise shifting by 0
Beware that this is essentially toInt32, which is not the same as Math.trunc. When the value does not satisfy -231 - 1 < value < 231 (-2147483649 < value < 2147483648), the conversion would overflow.
const a = ~~2147483648; // -2147483648 const b = ~~-2147483649; // 2147483647 const c = ~~4294967296; // 0
Only use ~~ as a substitution for Math.trunc() when you are confident that the range of input falls within the range of 32-bit integers.
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
trunc |
38 | 12 | 25 | 25 | 8 | 38 | 25 | 25 | 8 | 3.0 | 38 | 8 | 1.0.0 | 1.0 | 0.12.0 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc