js 写一个加减乘除去精度损失函数
时间: 2024-03-01 14:54:35 浏览: 83
可以通过封装函数的方式来实现加减乘除去精度损失的操作。以下是一个实现加减乘除去精度损失的函数:
```javascript
/**
* 加法运算
* @param {number} num1
* @param {number} num2
* @returns {number}
*/
function add(num1, num2) {
const m = Math.pow(10, Math.max(getDecimalLength(num1), getDecimalLength(num2)));
return (num1 * m + num2 * m) / m;
}
/**
* 减法运算
* @param {number} num1
* @param {number} num2
* @returns {number}
*/
function subtract(num1, num2) {
const m = Math.pow(10, Math.max(getDecimalLength(num1), getDecimalLength(num2)));
return (num1 * m - num2 * m) / m;
}
/**
* 乘法运算
* @param {number} num1
* @param {number} num2
* @returns {number}
*/
function multiply(num1, num2) {
const m = getDecimalLength(num1) + getDecimalLength(num2);
return (num1 * num2) / Math.pow(10, m);
}
/**
* 除法运算
* @param {number} num1
* @param {number} num2
* @returns {number}
*/
function divide(num1, num2) {
const t1 = getDecimalLength(num1);
const t2 = getDecimalLength(num2);
const r1 = Number(num1.toString().replace(".", ""));
const r2 = Number(num2.toString().replace(".", ""));
return (r1 / r2) * Math.pow(10, t2 - t1);
}
/**
* 获取小数位数
* @param {number} num
* @returns {number}
*/
function getDecimalLength(num) {
const str = num.toString();
const index = str.indexOf(".");
if (index === -1) {
return 0;
} else {
return str.length - index - 1;
}
}
```
以上代码中,我们使用 Math.pow() 方法来计算数字的指数,使用 Number() 方法将字符串转换为数字,使用 toString() 和 indexOf() 方法获取数字的小数位数。
使用以上函数进行加减乘除运算时,需要传入两个数值类型的参数,例如:
```javascript
console.log(add(0.1, 0.2)); // 输出 0.3
console.log(subtract(0.3, 0.2)); // 输出 0.1
console.log(multiply(0.1, 0.2)); // 输出 0.02
console.log(divide(0.3, 0.1)); // 输出 3
```
注意,以上函数只适用于处理小数位数较少的情况,对于小数位数较多的数字,建议使用 decimal.js 或其他高精度计算库来实现。
阅读全文