天天看點

一種JavaScript裡小數的精确計算方式

</div><div data-lake-id="e7c742b0f750f4640c8fbcb80b85eb19">/*</div><div data-lake-id="8dd096920038c0eb0e69955075307390"> 題目描述</div><div data-lake-id="529d00154fd7f41e5686e029c9430664">求 a 和 b 相乘的值,a 和 b 可能是小數,需要注意結果的精度問題  </div><div data-lake-id="6ee524cc63234364d911ae664ece4cb9">輸入例子:</div><div data-lake-id="8f5225e610494818c454060f5773c50a">multiply(3, 0.0001)</div><div data-lake-id="db9a299037d38317b590d0206700c2ed">輸出例子:</div><div data-lake-id="88c42f8b446e9888872ed95a3dc94596">0.0003</div><div data-lake-id="9b6b4222b7c608f901d873827c517134">String.prototype.substring()(<a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substring" target="_blank">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substring</a>)</div><div data-lake-id="6746413119cd7f057227ae5210a97582">Number.prototype.toFixed()(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)</div><div data-lake-id="b359172740607ceb24f6b15a2711aec0">// 推薦寫法</div><div data-lake-id="6ff0e4d6499b67e8623f1f8faeb1e2ed">*/</div><div data-lake-id="f8150d4928c8d92b8d25cb984738872a">function multiply(a, b) {</div><div data-lake-id="7145058e0651a7224a2dd0554552d2a0">    a = a.toString();</div><div data-lake-id="acb0fb8730ff468d20e59598173785a3">    b = b.toString();</div><div data-lake-id="4c251067343b8dde0f7708b8f312d49f">    var aLen = a.substring(a.indexOf('.') + 1).length;</div><div data-lake-id="509e823a86298c3271bbcfaff0cb8327">    var bLen = b.substring(b.indexOf('.') + 1).length;  </div><div data-lake-id="cca435630d1b7374f2364c836fceb414">   </div><div data-lake-id="8027c61954489dab8a051a0a6b44ad10">    return (a * b).toFixed(Math.max(aLen, bLen));</div><div data-lake-id="6c445ec4ce139303f6995de3e807d036">    /* 本題未說明保留小數位數, 這裡假定得出的結果不含多餘的0, 即0.0003000...需轉成0.0003 */</div><div data-lake-id="6f03214aa12f5f8c9f474a2212c63aad">}</div><div data-lake-id="6926c87bc6077401ad16b14e87ad9890">console.log( "Solution:" + multiply( 3, 0.0001 ));</div><div data-lake-id="9e031bed63882729535ed1a9e5602d4a">console.log( 3 * 0.0001 );</div><div data-lake-id="62b8f657d62c43dd1864935a49249d01">console.log( "Solution: " + multiply( 3.0001, 0.0002 ));</div><div data-lake-id="049088637b05c925d24f07ea8134c179">console.log( 3.0001 * 0.0002 );</div><div data-lake-id="9f954500bf0b3c5effeff43056e27ef2">

繼續閱讀