Number Truncation in JavaScript

Samantha Ming
Apr 8, 2019 · 3 min read
Image for post
Image for post
CodeTidbit by SamanthaMing.com
const number = 80.6// Old Way
number < 0 ? Math.ceil(number) : Math.floor(number);
// 80
// ✅ES6 Way
const es6 = Math.trunc(number);
// 80

Example

Math.trunc() simply truncates (cuts off) the dots and the digits to the right of it. No matter whether the argument is a positive or negative number.

Math.trunc(80.9); // 80
Math.trunc(80.8); // 80
Math.trunc(80.8); // 80
Math.trunc(80.6); // 80
Math.trunc(80.5); // 80
Math.trunc(80.4); // 80
Math.trunc(80.3); // 80
Math.trunc(80.2); // 80
Math.trunc(80.1); // 80
Math.trunc(-80.1); // -80
Math.trunc('80.1'); // 80
Math.trunc('hello'); // NaN
Math.trunc(NaN); // NaN
Math.trunc(undefined); // NaN
Math.trunc(); // NaN

Number truncation using parseInt

You can get a similar result using parseInt

parseInt(80.1); // 80
parseInt(-80.1); // -80
parseInt('80.1'); // 80
parseInt('hello'); // NaN
parseInt(undefined); // NaN
parseInt(); // NaN

Math.trunc() vs parseInt()

parseInt is mainly used for a string argument. So if you're dealing with numbers, it's way better to use Math.trunc().

The gotcha with parseInt

There’s a potential issue when using parseInt. When you pass in an argument that's not a string, in our case a number, it will first convert the value to a string using the toString() abstract operation. Most of the time, parseInt is fine. But let's look at an example where it might not be.

const number = 1000000000000000000000.5;const result = parseInt(number);console.log(result); // 1 <-- 😱
const number = 1000000000000000000000.5;const result = number.toString();console.log(result); // "1e+21"

Browser Support

Most modern browsers support Math.trunc(). EXCEPT, Internet Explorer. I know 😞 So if you need support for older browsers, use the old way 😕


Community Input

Bitwise Operator Solutions

Double Bitwise NOT ~~

console.log(~~80.6); // 80
console.log(80.6 | 0); // 80

toFixed Solution

Frani 🍍: You also can use method .toFixed()

(80.645).toFixed() // “80”
Number((80.645).toFixed()) // 80
Image for post
Image for post

Resources

MDN Web Docs: Math.trunc
MDN Web Docs: parseInt
MDN Web Docs: Bitwise operators
JS Tip: Use parseInt for strings, NOT for numbers
2ality: parseInt doesn’t always correctly convert to integer

Share

Image for post
Image for post

DailyJS

JavaScript news and opinion.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store