解决js小数点精度问题(ts)(欢迎测试)

494 阅读1分钟
  const calculate = (num1: number, num2: number, op: string) => {
    let a: number | string, b: number | string, len1: number, len2: number;
    try {
      len1 = num1.toString().split(".")[1].length;
    } catch (error) {
      len1 = 0;
    }
    try {
      len2 = num2.toString().split(".")[1].length;
    } catch (error) {
      len2 = 0;
    }
    a = num1.toString().split(".").join("");
    b = num2.toString().split(".").join("");
    let c = Math.pow(10, Math.abs(len1 - len2));
    len1 > len2 && (b = Number(b) * c);
    len1 < len2 && (a = Number(a) * c);
    let d = Math.pow(10, Math.max(len1, len2));
    if (op === "jia") return (Number(a) + Number(b)) / d;
    if (op === "jian") return (Number(a) - Number(b)) / d;
    if (op === "cheng") return (Number(a) * Number(b)) / Math.pow(10, Math.max(len1, len2) * 2);
    if (op === "chu") return Number(a) / Number(b);
  };
  console.log(calculate(1.11, 2.22, "cheng"));