javascript 的带小数的加法会有误差 1234567891011121314151617181920212223242526272829303132333435363738394041function plus(a, b) { // 数字转字符 a = String(a); b = String(b); // 按 . 分割成数组 var arr = a.split('.'); var brr = b.split('.'); // 整数部分正常相加 var rezheng = Number(arr[0]) + Number(brr[0]); // 取小数部分 var ax = arr.length == 1 ? '0' : arr[1]; var bx = brr.length == 1 ? '0' : brr[1]; // 较短的小数位数后面+0,变成相同位数 // 如 5 +12 => 50+12 (相当于0.50+0.12) var axl = ax.length, bxl = bx.length; var a_b_l = axl - bxl; var maxl = axl; if (a_b_l > 0) { for (var i = 0; i < a_b_l; i++) { bx += '0'; } } if (a_b_l < 0) { maxl = bxl; a_b_l = a_b_l * -1; for (var i = 0; i < a_b_l; i++) { ax += '0'; } } //小数部分相加 var rexiao = Number(ax) + Number(bx); // 如果小数相加进位了,加到整数上 // 如 9+8 =17 ; 0.9+0.8 => 1.7 if (String(rexiao).length > maxl) { rexiao = String(rexiao).slice(maxl * -1); rezheng = rezheng + 1; } // 用小数点连接整数和小数,并返回 return Number(rezheng + '.' + rexiao);} 编辑文章✏