Did you know that JavaScript automatically trims off trailing zeros on numbers with decimals?
Well now you do, and in order to save precision you must wrap the number inside a string.
Example:
1
2
3
4
5
6
| var a = "0.0100";
var b = 0.0100; // To save space the interpreter cuts off the last two zeros.
console.log( a === b.toString() ); // displays false because a = "0.0100" and b = 0.01
console.log( 1000 === 1000.000 ); // displays true
console.log( 0.1 === 0.1000 ); // displays true |
Some might argue that you can use num.toPrecision() to save the trailing zeros. But what most are unaware of is that toPrecision() returns a string.
1
2
3
4
5
| var num = (120.0).toPrecision(8);
console.log( num ); // displays 120.00000
console.log( typeof num ); // displays string
console.log( +num ); // displays 120
// +num is a shortcut for parseInt( num, 10); |
Now let’s see what happens with leading zero’s.
1
2
3
4
5
6
7
| //A leading 0 in front of a number converts it base 8.
// a.k.a. parseInt( num, 8);
console.log(0011); // Displays 9
console.log( 010.1000 ); // Error! Octals can only be whole numbers.
console.log( 00000.1000 ); // Error for the same reason.
// The problem is that a leading zero will cause the number to be converted to octal.
// Thus, an error is generated because the decimal point is neither an operation nor semicolon. |
Using numbers as strings can be useful when trying to find the Significant Digits, like in the following function.
1
2
3
4
5
6
7
8
9
10
11
12
| //Function: getSigFigFromNum( num ), provides the significant digits of a number.
//@num must be a number (base 10) that is a string. example "01"
var getSigFigFromNum = function( num ){
if( isNaN( +num ) ){
throw new Error( "getSigFigFromNum(): num (" + num + ") is not a number." );
}
// We need to get rid of the leading zeros for the numbers.
num = num.replace( /^0+/, '');
// re is a RegExp to get the numbers from first non-zero to last non-zero
var re = /[^0](\d*[^0])?/;
return ( /\./.test( num ) )? num.length - 1 : (num.match( re ) || [''])[0].length;
}; |
Usage:
1
| getSigFigFromNum( "0.01230" ); //returns 4 |
DEMO: http://jsbin.com/okide4
Can you think of any other useful examples for number wrapped in strings?
Recent Comments