JS加減乘除位移方法封裝
常用加減乘除等方法彙總
直接上程式碼,邏輯簡單,程式碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Math Methods</title>
</head>
<body>
<div id="div">加減乘除位移方法彙總</div>
<script type="application/javascript">
/**
* 向右移動小數點 ,相當於乘10的_pointcount次冪
* @param _number 操作的數字
* @param _pointcount 向右移動的位數
* @returns 移動以後的數字(number型別)
*/
var moveRight = function (_number, _pointcount) {
if (Number(_number) !== Number(_number)) {
return _number;
}
var flag = 1;
if (_number < 0) {
flag = -1;
_number = _number * -1;
}
var numStr = _number.toString();
var strArr = numStr.split(".");
var rightStr = strArr.length > 1 ? strArr[1] : "";
//在不足移動的位數後補0;
if (rightStr.length < _pointcount) {
var addZero = [];
for (var i = rightStr.length; i < _pointcount; i++) {
addZero.push("0");
}
rightStr = rightStr + addZero.join("");
}
return Number(strArr[0] + rightStr.substring(0, _pointcount) + "." + rightStr.substr(_pointcount)) * flag;
};
/**
* 向左移動小數點,相當於_number除以10的_pointcount次冪
* @param _number 操作的數字
* @param _pointcount 向左移動的位數
* @returns 移動以後的數字(number型別)
*/
var moveLeft = function (_number, _pointcount) {
//判斷是否為數字,非數字直接返回本身
if (Number(_number) !== Number(_number)) {
return _number;
}
var flag = 1;
if (_number < 0) {
flag = -1;
_number = _number * -1;
}
//number轉換為string ,方便後續操作。
var numStr = _number.toString();
//按照小數點分隔字串,
var strArr = numStr.split(".");
var num = 0, zeroArr = [];
//生成移動位數+1的0 ,補到分隔後的第一個字串中,相容0.XXX的情況。開頭多餘的零會在呼叫Number方法時去掉。
while (num < _pointcount + 1) {
zeroArr.push("0");
num++;
}
var leftStr = zeroArr.join("") + strArr[0];
var leftArr = leftStr.split("")
//插入移動後的小數點。
leftArr.splice((leftStr.length - _pointcount), 0, '.');
var result = leftArr.join("");
//拼接原始值小數點後的數字
if (strArr.length > 1) {
result += strArr[1];
}
return Number(result) * flag;
};
/**
* 加法
* @param _num1
* @param _num2
* @param precision 精度
* @returns {*}
*/
var add = function (_num1, _num2, precision) {
if (!precision) {
precision = 2;
}
return moveLeft(moveRight(_num1, precision) + moveRight(_num2, precision), precision)
};
/**
* 減法
* @param minuend
* @param reduction
* @returns {*}
*/
var reduce = function (minuend, reduction, precision) {
if (!precision) {
precision = 2;
}
return moveLeft(moveRight(minuend, precision) - moveRight(reduction, precision), precision)
};
/**
* 乘法
* @param _num1
* @param _num2
* @returns {number}
*/
var multiplication = function (_num1, _num2, precision) {
if (!precision) {
precision = 2;
}
return moveLeft(moveRight(_num1, precision) * moveRight(_num2, precision), precision * 2)
};
/**
* 除法
* @param _num1 被除數
* @param _num2 除數
* @param precision 精度 整形,幾位小數
* @returns {number}
*/
var division = function (_num1, _num2, precision) {
if (!precision) {
precision = 2;
}
return moveRight(_num1, precision) / moveRight(_num2, precision);
};
console.log(moveRight(0.9999999,3));
console.log(moveLeft(88888888888,2));
console.log(add(1.01,7.079,8));
console.log(reduce(8.01,1,2));
console.log(multiplication(1,8.88,2));
console.log(division(16,2,2))
</script>
</body>
</html>
相關文章
- JS 加減乘除 尤其是減法精度問題JS
- 超大整數的加減乘除計算方法
- MongoDB 中的【加減乘除】運算MongoDB
- 位運算實現加減乘除
- 簡單的加減乘除(遞迴)遞迴
- 不用加減乘除做加法(Java實現)Java
- 大資料的運算加減乘除大資料
- Verilog實現加減乘除運算
- JavaScript浮點數加減乘除精確計算JavaScript
- 7-2 算術入門之加減乘除
- 三個數字的加減乘除模運算
- 浮點數的加減乘除運算細節
- 二進位制運算加減乘除+快速冪
- [每日一題] 第六題:不用加減乘除做加法每日一題
- java的多項式的加減乘除和賦值Java賦值
- 劍指offer 面試題47:不用加減乘除做加法面試題
- NumPy 簡單算術:加減乘除及其他運算
- LeetCode 劍指 Offer 65. 不用加減乘除做加法LeetCode
- 商城購物車加減控制元件的簡單封裝控制元件封裝
- C++筆記:輸入輸出、變數、變數加減乘除C++筆記變數
- 大資料帶來信貸“四則運算”:金融生態需要“加減乘除”大資料
- 前端機試之js方法封裝前端JS封裝
- 5G位移下的封裝產業“地殼運動”封裝產業
- ABAP面試問題 - 不使用加減乘除等操作比較兩個整數大小面試
- JSF的加減法與SeamJS
- 陣列方法的封裝/程式碼的複用加強陣列封裝
- 開發時候常用的js方法封裝JS封裝
- JS功能封裝JS封裝
- JS 封裝類JS封裝
- JS — websocket封裝JSWeb封裝
- Python運算子可不只有加減乘除Python
- BigDecimal加減乘除運算,保留2位小數點,初始化,與0的比較Decimal
- 【封裝小技巧】is 系列方法的封裝封裝
- 用原生js封裝一個ajax請求方法JS封裝
- ajax原生js封裝JS封裝
- jsonp promise 封裝JSONPromise封裝
- 原生js封裝AjaxJS封裝
- jsonp 封裝思想JSON封裝