Javascript (js) decimal precision loss solution, javascriptjs
Cause: js processes decimal addition, subtraction, multiplication, division according to the binary mechanism. Based on arg1, the accuracy of arg2 is extended or inverse extended, so the following situations may occur.
Javascript (js) decimal point addition, subtraction, multiplication, division, is a js bug such as 0.3*1 = 0.2999999999. The following lists the four js algorithms that perfectly match the accuracy.
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
<Span style = "font-family: Arial, Helvetica, sans-serif;"> // Division </span>
Function accDiv (arg1, arg2) {var t1 = 0, t2 = 0, r1, r2; try {t1 = arg1.toString (). split (". ") [1]. length} catch (e) {}try {t2 = arg2.toString (). split (". ") [1]. length} catch (e) {}with (Math) {r1 = Number (arg1.toString (). replace (". "," ") r2 = Number (arg2.toString (). replace (". "," ") return accMul (r1/r2), pow (10, t2-t1) ;}// multiplication function accMul (arg1, arg2) {var m = 0, s1 = arg1.toString (), s2 = arg2.toString (); try {m + = s1.split (". ")[ 1]. length} catch (e) {}try {m + = s2.split (". ") [1]. length} catch (e) {} return Number (s1.replace (". "," ") * Number (s2.replace (". "," ")/Math. pow (10, m)} // Add function accAdd (arg1, arg2) {var r1, r2, m; try {r1 = arg1.toString (). split (". ") [1]. length} catch (e) {r1 = 0} try {r2 = arg2.toString (). split (". ") [1]. length} catch (e) {r2 = 0} m = Math. pow (10, Math. max (r1, r2) return (arg1 * m + arg2 * m)/m} // subtraction function Subtr (arg1, arg2) {var r 1, r2, m, n; try {r1 = arg1.toString (). split (". ") [1]. length} catch (e) {r1 = 0} try {r2 = arg2.toString (). split (". ") [1]. length} catch (e) {r2 = 0} m = Math. pow (10, Math. max (r1, r2); n = (r1> = r2 )? R1: r2; return (arg1 * m-arg2 * m)/m). toFixed (n );}