Simple floating-point arithmetic

parseFloat((mathematical expression).tofixed (digits));// toFixed() must run between 0 and 20
parseFloat((1.0 - 0.9).toFixed(10)) // Result is 0.1
parseFloat((0.3 / 0.1).toFixed(10)) // The result is 3
parseFloat((9.7 * 100).toFixed(10)) // Result is 970
parseFloat((2.22 + 0.1).toFixed(10)) // Result is 2.32
Copy the code

The above method is not compatible with older versions of IE(6, 7, 8), and the return value of toFixed() method may not be accurate.

  1. Precision processing of multiplication
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);
},
const num = this.accMul(arg1,100) // Call the handler method, where *100 handles the price
Copy the code
  1. Division precision processing
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 (r1 / r2) * pow(10, t2 - t1); }}const num = this.accMul(arg1,arg2) // Call the processing method
Copy the code
  1. Accuracy processing of addition
accAdd(arg1, arg2) {
    var r1, r2, m, c;
    try {
        r1 = arg1.toString().split(".") [1].length;
    }
    catch (e) {
        r1 = 0;
    }
    try {
        r2 = arg2.toString().split(".") [1].length;
    }
    catch (e) {
        r2 = 0;
    }
    c = Math.abs(r1 - r2);
    m = Math.pow(10.Math.max(r1, r2));
    if (c > 0) {
        var cm = Math.pow(10, c);
        if (r1 > r2) {
            arg1 = Number(arg1.toString().replace(".".""));
            arg2 = Number(arg2.toString().replace("."."")) * cm;
        } else {
            arg1 = Number(arg1.toString().replace("."."")) * cm;
            arg2 = Number(arg2.toString().replace("."."")); }}else {
        arg1 = Number(arg1.toString().replace(".".""));
        arg2 = Number(arg2.toString().replace(".".""));
    }
    return (arg1 + arg2) / m;
}
const num = this.accMul(arg1,arg2) // Call the processing method
Copy the code
  1. Subtraction precision processing
accSub(arg1, arg2) {
    var r1, 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)); //last modify by deeka //
    n = (r1 >= r2) ? r1 : r2;
    return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
const num = this.accMul(arg1,arg2) // Call the processing method
Copy the code

This article is reprinted, the original address, the record is convenient to find learning