问题: 加减乘除的精度不准确
    1640159842(1).png
    解决方案/思路:
    先将小数转换成整数, 计算后的整数再转换成小数

    1. // 获取小数点后的位数
    2. var trs = function(num){
    3. var str = num.toString();
    4. var point = str.indexOf('.');
    5. var pow = str.length - point - 1;
    6. return Math.pow(10, pow);
    7. }
    8. // 两数相加
    9. var add = function(a, b) {
    10. var m1 = trs(a), m2 = trs(b);
    11. var k = m1 > m2 ? m1 : m2;
    12. return (a*k + b*k) / k;
    13. }
    14. var p1 = add(0.1, 0.2);
    15. console.log(p1); // 0.3
    16. // 两数相减
    17. var minus = function(a, b) {
    18. var m1 = trs(a), m2 = trs(b);
    19. var k = m1 > m2 ? m1 : m2;
    20. return (a*k - b*k) / k;
    21. }
    22. var p2 = minus(0.3, 0.2);
    23. console.log(p2); // 0.1
    24. // 两数相乘
    25. var multiply = function(a, b) {
    26. var m1 = trs(a), m2 = trs(b);
    27. var k = m1 > m2 ? m1 : m2;
    28. return (a*k * b*k) / (k * k);
    29. }
    30. var p3 = multiply(3, 0.7);
    31. console.log(p3); // 2.1
    32. // 两数相除
    33. var divide = function(a, b) {
    34. var m1 = trs(a), m2 = trs(b);
    35. var k = m1 > m2 ? m1 : m2;
    36. return (a*k / b*k) / (k * k);
    37. }
    38. var p4 = divide(0.3, 0.2);
    39. console.log(p4); // 1.5

    运行结果:
    image.png