Hey Everybody,
I made a video for one of my old post, What are Sig Figs? Tutorial
Enjoy. 🙂
Code of the Day: Javascript Significant Figures
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
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 13 14 15 16 | // Returns the significant digits of a number. // @param {Number|String} num // @return Returns -1 if invalid input, otherwise will return a positive number. var getSigFigs = function (num) { if (!isFinite(Number(num))) { return -1; } var n = String(num).trim(), FIND_FRONT_ZEROS_SIGN_DOT_EXP = /^[\D0]+|\.|([e][^e]+)$/g, FIND_RIGHT_ZEROS = /0+$/g; if (!/\./.test(num)) { n = n.replace(FIND_RIGHT_ZEROS, ""); } return n.replace(FIND_FRONT_ZEROS_SIGN_DOT_EXP, "").length; }; |
Usage:
1 | console.log( getSigFigFromNum( "0.01230" ) == 5); |
Test cases
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | // Try using Qunit to run tests. var assert = {}; assert.equal = function (a, b) { if (a != b) { console.error("FAIL: --> %s != %s", a, b); } else { console.log("Pass: %s == %s", a, b); } }; var test = function (name, fn) { console.log("\n#Testing: %s", name); fn(); }; test("Invalid numbers", function () { assert.equal(getSigFigs("742400g"), -1); assert.equal(getSigFigs("g742400"), -1); assert.equal(getSigFigs("Infinity"), -1); assert.equal(getSigFigs("-Infinity"), -1); assert.equal(getSigFigs("NaN"), -1); }); var testWithPrefixes = function (prefixes, nums, fn) { prefixes.forEach(function (prefix) { nums.forEach(function (num) { //assert.equal( "Testing " + expected + "" prefix+expected, fn(prefix+num)); }); }); }; test("Whole Numbers", function () { assert.equal(getSigFigs("742400"), 4); assert.equal(getSigFigs("742000"), 3); assert.equal(getSigFigs("740000"), 2); assert.equal(getSigFigs("700000"), 1); }); test("Negative Whole Numbers", function () { assert.equal(getSigFigs("-742400"), 4); assert.equal(getSigFigs("-742000"), 3); assert.equal(getSigFigs("-740000"), 2); assert.equal(getSigFigs("-700000"), 1); }); test("+Whole numbers", function () { assert.equal(getSigFigs("+742400"), 4); assert.equal(getSigFigs("+742000"), 3); assert.equal(getSigFigs("+740000"), 2); assert.equal(getSigFigs("+700000"), 1); }); test("Decimals", function () { assert.equal(getSigFigs("0.07284"), 4); assert.equal(getSigFigs("0.0728"), 3); assert.equal(getSigFigs("0.072"), 2); assert.equal(getSigFigs("0.07"), 1); assert.equal(getSigFigs("123.07"), 5); }); test("Negative Decimals", function () { assert.equal(getSigFigs("-0.07284"), 4); assert.equal(getSigFigs("-0.0728"), 3); assert.equal(getSigFigs("-0.072"), 2); assert.equal(getSigFigs("-0.07"), 1); assert.equal(getSigFigs("-10.07"), 4); }); test("Decimals", function () { assert.equal(getSigFigs("+0.07284"), 4); assert.equal(getSigFigs("+0.0728"), 3); assert.equal(getSigFigs("+0.072"), 2); assert.equal(getSigFigs("+0.07"), 1); }); test("Zero", function () { assert.equal(getSigFigs("0.0"), 0); assert.equal(getSigFigs("-0.0"), 0); assert.equal(getSigFigs("0"), 0); assert.equal(getSigFigs("+0"), 0); assert.equal(getSigFigs("-0"), 0); }); test("E notated", function () { assert.equal(getSigFigs("1.3e32"), 2); assert.equal(getSigFigs("-1.23e-32"), 3); assert.equal(getSigFigs("-1.023e+120"), 4); assert.equal(getSigFigs("+5.023e+32"), 4); assert.equal(getSigFigs("+5.0230e+32"), 5); }); |
Can you think of any other useful examples for number wrapped in strings?
Code of the Day: Javascript Detect Internet Explorer
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
How many hours have you spent wasted on getting your site to run or display properly on Internet Explorer?
Do you want to cheat and use browser stiffing instead of feature detection?
1 2 | // isIE is your key to freedom! You still never again be the same. var isIE = !!!!!!!!window.ActiveXObject;//!!!!! |
Video: Learn How to Type Faster in Step 3

Feeling the urge to learn something new, I decided to discover what it takes to produce a video and host it on Youtube.com.
After brain storming some ideas and watching videos to see what was out there, I finally decided upon making a video tutorial on how improve one’s typing speed.
Here’s the result.
“Learn How to Type Faster in Step 3 ” is my first video that I ever made and I learned a lot from the whole process. It took about half a day to complete but that was due to the fact that I had to research what software to use. A few rules that I found along the way are to are
- Get help writing subtitles because they take a longggg time! Unfortunately for me, the auto-caption feature failed with an error message of “Machine Transition Failed”. So that left me manually writing the subtitles by hand. I spent 2 hours writing subtitles for this 14 minute video, and the worse part is I could only insert 8 minutes worth of subtitles into the video because the on-line subtitle program I was using(captionTube) crashed every time after that point.
- Upload then do something else. It’s going to be a while get all 50MB+ of your video onto youtube.com. My upload time was about 1 hour.
- Don’t record everything in one take. It’s better to record multiple takes of a segment, then join the best parts into one long video.
For those wondering, I only used free-ware software for this project. Here’s a list of what I used.
- Video editing: Windows Live Movie Maker and Avidemux.
- Audio editing: Audacity
- Video and Audio Conversion: “Super” and “iWisoft Free Video Converter”.
- Subtitles: CaptionTube Beta (A little buggy)
- Screen Capturing Software: CamStudio