Warning: Undefined array key "layout" in /home/bateeqjg/public_html/news/wp-content/plugins/wp-about-author/wp-about-author.php on line 94
Hey Everybody,
I made a video for one of my old post, What are Sig Figs? Tutorial
Enjoy. 🙂
Hey Everybody,
I made a video for one of my old post, What are Sig Figs? Tutorial
Enjoy. 🙂
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); |
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?
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;//!!!!! |

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
For those wondering, I only used free-ware software for this project. Here’s a list of what I used.