How to deal with numbers in JavaScript
We can deal with numbers in JavaScript in many ways. Lets look at the basics.
The size of a JavaScript number
In JavaScript a number is always a 64 bit floating point. There is no integer, nor decimal, nor bit. Only a 64 bit floating point. This precision follows the international IEEE 754 Standard.
We can divided the the 64 bits as follows:
- Bits 0 to 51, are the value of the number (also known as fraction or mantissa)
- Bits 52 to 62, are the exponent of the number
- Bits 63, is the sign bit
This structure of the number gives us the following:
- A number, without decimal point or exponent, can only be exact up to 15 digits long
- A number can have up to 17 decimals numbers
How to create a number in JavaScript
You can create numbers in JavaScript as integers (without any decimal point), or as decimal (with decimal points), or as exponents or scientific notation or as hexadecimal number using the following simple way:
var myIntegerNumber = 234; // integer var myDecimalNumber = 45.67; // decimal var myExponentNumber = 345e5; // exponent var myHexadecimalNumber = 0xFF; // hexadecimal
When creating a number other than a hexadecimal, do not start it with a zero digit, since some browsers or frameworks do not work correctly with it.
You can, also, create a number using the Number object as follows:
var myObjectNumber = new Number(456); // a number object
Be aware than using the number object will affect your performance and will create some problems when comparing numbers in your code, see below for more details.
Converting numbers to strings
We can convert Numbers to a string in two ways: by concatenation or by using the toString() method.
Concatenating is the first way to convert a number to a string. For example:
var newString = "Carlos " + 5; //return: Carlos 5 var newString2 = 5 + "6"; // return: 56, not 11
The second method is to use the toString() method. You will be able to convert a number to a base 10 string, and also to hexadecimal, octal and binary strings.
var myNumber = 128; var myBase10String = myNumber.toString(); // return: 128 var myHexadecimalString = myNumber.toString(16); // return: 80 var myOctalString = myNumber.toString(8); // return: 200 var myBinaryString = myNumber.toString(2); // return: 10000000
Comparing numbers
We can compare any number using the == or the === equality operators. But we could face some problems, if we are comparing numbers created using the simple way versus a number created using the Number object. When using the == equality operator we will not have any problem.
var s = 123; var o = new Number(123); // s == o, will return true since the == equality operator will compare only the value of both numbers
If we use the === equality operator to compare numbers, we will get a different result, since the operator not only compare the value, but also the object.
var s = 123; var o = new Number(123); // s === o, will return false, since s and o are different objects
Be aware that creating the number with the same value using the Number object and using the === equality operator also will not return true. Every time we create a new number object, it is a different number object:
var s = new Number(123); var o = new Number(123); // s === o, will return false, since s and o are different objects.
Numbers are easy in JavaScript. They are not as complicated as other languages. Knowing the basics of them will help us to build robust and performance wise applications.