js加減乘除運算時失去精度問題解決方法
阿新 • • 發佈:2019-02-09
加法:
- /**
- * 加法運算,避免資料相加小數點後產生多位數和計算精度損失。
- *
- * @param num1加數1 | num2加數2
- */
- function numAdd(num1, num2) {
- var baseNum, baseNum1, baseNum2;
- try {
- baseNum1 = num1.toString().split(".")[1].length;
- } catch (e) {
- baseNum1 = 0;
- }
- try {
- baseNum2 = num2.toString().split(".")[1].length;
- } catch (e) {
- baseNum2 = 0;
- }
- baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
- return (num1 * baseNum + num2 * baseNum) / baseNum;
- };
減法:
- /**
- * 加法運算,避免資料相加小數點後產生多位數和計算精度損失。
- *
- * @param num1加數1 | num2加數2
- */
- function numAdd(num1, num2) {
- var baseNum, baseNum1, baseNum2;
- try {
- baseNum1 = num1.toString().split(".")[1].length;
- } catch (e) {
- baseNum1 = 0;
- }
- try {
- baseNum2 = num2.toString().split("."
- } catch (e) {
- baseNum2 = 0;
- }
- baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
- return (num1 * baseNum + num2 * baseNum) / baseNum;
- };
乘法:
- /**
- * 乘法運算,避免資料相乘小數點後產生多位數和計算精度損失。
- *
- * @param num1被乘數 | num2乘數
- */
- function numMulti(num1, num2) {
- var baseNum = 0;
- try {
- baseNum += num1.toString().split(".")[1].length;
- } catch (e) {
- }
- try {
- baseNum += num2.toString().split(".")[1].length;
- } catch (e) {
- }
- return Number(num1.toString().replace(".", ""))
- * Number(num2.toString().replace(".", ""))
- / Math.pow(10, baseNum);
- };
除法:
- /**
- * 除法運算,避免資料相除小數點後產生多位數和計算精度損失。
- *
- * @param num1被除數 | num2除數
- */
- function numDiv(num1, num2) {
- var baseNum1 = 0, baseNum2 = 0;
- var baseNum3, baseNum4;
- try {
- baseNum1 = num1.toString().split(".")[1].length;
- } catch (e) {
- baseNum1 = 0;
- }
- try {
- baseNum2 = num2.toString().split(".")[1].length;
- } catch (e) {
- baseNum2 = 0;
- }
- with (Math) {
- baseNum3 = Number(num1.toString().replace(".", ""));
- baseNum4 = Number(num2.toString().replace(".", ""));
- return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
- }
- };