Launch Week Day 5: Introducing Reachability for PHP.Learn More
Socket
Book a DemoSign in
Socket

calculate-asmd

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

calculate-asmd - npm Package Compare versions

Comparing version
2.3.3
to
2.4.4
+242
dist/index.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = global || self, factory(global.CalculateAsmd = {}));
}(this, function (exports) { 'use strict';
/**
* [scaleNum 将一个number浮点数放大或缩小position个小数点位数]
* @param {number} number 要放缩的浮点数
* @param {number} position 小数点移动位数
* position大于0为放大,小于0为缩小,等于0不做缩放。
* @return {number} 放缩后的数
*/
var scaleNum = function scaleNum() {
var number = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var num = Number(number);
var posNum = Number(position); // 如果传入两个参数,Number转化后为NaN则直接返回NaN
if (isNaN(num) || isNaN(posNum)) {
return NaN;
}
if (num === 0 || posNum === 0) {
return num;
}
var absNum = num;
var s = 1;
if (num < 0) {
absNum = Math.abs(num);
s = -1;
}
var parts = absNum.toString().split('.');
var intLen = parts[0].length;
var decimalLen = parts[1] ? parts[1].length : 0;
if (posNum > 0) {
// 放大
var zeros = posNum - decimalLen;
while (zeros > 0) {
zeros -= 1;
parts.push(0);
}
} else {
// 缩小
var _zeros = Math.abs(posNum) - intLen;
while (_zeros > 0) {
_zeros -= 1;
parts.unshift(0);
}
}
var idx = intLen + posNum;
parts = parts.join('').split('');
parts.splice(idx > 0 ? idx : 0, 0, '.');
if (s < 0) {
parts.unshift('-');
}
return parseFloat(parts.join(''));
};
/**
* [add 通过比较两个加数谁的小数位最大,将两数小数点右移为整数进行计算]
* @param {number} arg1 加数
* @param {number} arg2 被加数
* @return {number} 结果
*/
var add = function add() {
var arg1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var param1 = Number(arg1);
var param2 = Number(arg2);
if (isNaN(param1) || isNaN(param2)) {
return NaN;
}
var r1 = 0;
var r2 = 0;
var scale = 0;
try {
r1 = param1.toString().split('.')[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = param2.toString().split('.')[1].length;
} catch (e) {
r2 = 0;
}
scale = Math.max(r1, r2);
var num1 = scaleNum(param1, scale);
var num2 = scaleNum(param2, scale);
var num = num1 + num2;
var result = scaleNum(num, -scale);
return result;
};
/**
* [sub 通过比较两个加数谁的小数位最大,将两数小数点右移为整数进行计算]
* @param {number} arg1 减数
* @param {number} arg2 被减数
* @return {number} 结果
*/
var sub = function sub() {
var arg1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var param1 = Number(arg1);
var param2 = Number(arg2);
if (isNaN(param1) || isNaN(param2)) {
return NaN;
}
var r1 = 0;
var r2 = 0;
var scale = 0;
try {
r1 = param1.toString().split('.')[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = param2.toString().split('.')[1].length;
} catch (e) {
r2 = 0;
}
scale = Math.max(r1, r2);
var num1 = scaleNum(param1, scale);
var num2 = scaleNum(param2, scale);
var num = num1 - num2;
var result = scaleNum(num, -scale);
return result;
};
/**
* [mul 将两个浮点数参数replace掉小数点为整数计算,scale在这里进行累计小数位]
* @param {number} arg1 乘数
* @param {number} arg2 被乘数
* @return {number} 结果
*/
var mul = function mul() {
var arg1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var param1 = Number(arg1);
var param2 = Number(arg2);
if (isNaN(param1) || isNaN(param2)) {
return NaN;
}
var num1 = Number(param1.toString().replace('.', ''));
var num2 = Number(param2.toString().replace('.', ''));
var scale = 0;
try {
scale += param1.toString().split('.')[1].length;
} catch (e) {
scale += 0;
}
try {
scale += param2.toString().split('.')[1].length;
} catch (e) {
scale += 0;
}
var num = num1 * num2;
var result = scaleNum(num, -scale);
return result;
};
/**
* [div 将两个浮点数参数replace掉小数点为整数计算,scale是被除数与除数的移动位数差]
* @param {number} arg1 除数
* @param {number} arg2 被除数
* @return {number} 结果
*/
var div = function div() {
var arg1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var param1 = Number(arg1);
var param2 = Number(arg2);
if (isNaN(param1) || isNaN(param2)) {
return NaN;
}
var num1 = Number(param1.toString().replace('.', ''));
var num2 = Number(param2.toString().replace('.', ''));
var left1 = 0;
var left2 = 0;
try {
left1 = Number(param1.toString().split('.')[1].length);
} catch (e) {
left1 = 0;
}
try {
left2 = Number(param2.toString().split('.')[1].length);
} catch (e) {
left2 = 0;
}
/**
* 当被除数100是整数没有移动小数位,那么left2为0,除数0.57在运算中转整数为57。
* 在实际的运算中0.57除以100中的0.57是根据被除数来移动小数的。
* 所以,0 - 2 = -2。 将运算结果缩小两位为实际小数点位置
*
* 除数多拿了被除数的几口口粮,最后要还回去的。
*
*/
var scale = left2 - left1;
var num = num1 / num2;
var result = scaleNum(num, scale);
return result;
};
exports.add = add;
exports.div = div;
exports.mul = mul;
exports.scaleNum = scaleNum;
exports.sub = sub;
Object.defineProperty(exports, '__esModule', { value: true });
}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).CalculateAsmd={})}(this,function(t){"use strict";var e=function(){var t=+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:0),e=+(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0);if(isNaN(t)||isNaN(e))return NaN;if(0===t||0===e)return t;var a=t,r=1;0>t&&(a=Math.abs(t),r=-1);var i=(""+a).split("."),n=i[0].length;if(e>0)for(var l=e-(i[1]?i[1].length:0);l>0;)l-=1,i.push(0);else for(var s=Math.abs(e)-n;s>0;)s-=1,i.unshift(0);var h=n+e;return(i=i.join("").split("")).splice(h>0?h:0,0,"."),0>r&&i.unshift("-"),parseFloat(i.join(""))};t.add=function(){var t=+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:0),a=+(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0);if(isNaN(t)||isNaN(a))return NaN;var r,i=0,n=0;try{i=(""+t).split(".")[1].length}catch(t){i=0}try{n=(""+a).split(".")[1].length}catch(t){n=0}var l=e(t,r=Math.max(i,n)),s=e(a,r);return e(l+s,-r)},t.div=function(){var t=+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:0),a=+(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0);if(isNaN(t)||isNaN(a))return NaN;var r=+(""+t).replace(".",""),i=+(""+a).replace(".",""),n=0,l=0;try{n=+(""+t).split(".")[1].length}catch(t){n=0}try{l=+(""+a).split(".")[1].length}catch(t){l=0}return e(r/i,l-n)},t.mul=function(){var t=+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:0),a=+(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0);if(isNaN(t)||isNaN(a))return NaN;var r=+(""+t).replace(".",""),i=+(""+a).replace(".",""),n=0;try{n+=(""+t).split(".")[1].length}catch(t){n+=0}try{n+=(""+a).split(".")[1].length}catch(t){n+=0}return e(r*i,-n)},t.scaleNum=e,t.sub=function(){var t=+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:0),a=+(arguments.length>1&&void 0!==arguments[1]?arguments[1]:0);if(isNaN(t)||isNaN(a))return NaN;var r,i=0,n=0;try{i=(""+t).split(".")[1].length}catch(t){i=0}try{n=(""+a).split(".")[1].length}catch(t){n=0}var l=e(t,r=Math.max(i,n)),s=e(a,r);return e(l-s,-r)},Object.defineProperty(t,"__esModule",{value:!0})});
+2
-1
{
"name": "calculate-asmd",
"version": "2.3.3",
"version": "2.4.4",
"description": "The precise addition, subtraction, multiplication and division of JavaScript avoids the error of floating point calculation",

@@ -18,2 +18,3 @@ "license": "MIT",

"jsnext:main": "dist/index.esm.js",
"unpkg": "dist/index.umd.js",
"typings": "typings/index.d.ts",

@@ -20,0 +21,0 @@ "sideEffects": false,

+42
-22

@@ -16,33 +16,48 @@ # calculate-asmd

<h3>yarn</h3>
`yarn add calculate-asmd`
or
<h3>npm</h3>
`npm install calculate-asmd --save`
<h3>umd</h3>
```javascript
<script src="https://unpkg.com/calculate-asmd@2.4.4/dist/index.umd.js"></script>
OR
<script src="https://unpkg.com/calculate-asmd@2.4.4/dist/index.umd.min.js"></script>
```
> Tips: You can find the library on window.CalculateAsmd.
<h2>Usage</h2>
```
import { add, sub, mul, div } from 'calculate-asmd'
const addNum = add(0.2, 0.4);
console.log("add(0.2, 0.4): ", addNum); //add(0.2, 0.4): 0.6
const addNegative = add(0.2, -0.4);
console.log("add(0.2, -0.4): ", addNegative); //add(0.2, -0.4): -0.2
import { add, sub, mul, div } from 'calculate-asmd'
const subNum = sub(0.2, 0.4);
console.log("sub(0.2, 0.4): ", subNum); //sub(0.2, 0.4): -0.2
const subNegative = sub(0.2, -0.4);
console.log("sub(0.2, -0.4): ", subNegative); //sub(0.2, -0.4): 0.6
const addNum = add(0.2, 0.4);
console.log("add(0.2, 0.4): ", addNum); //add(0.2, 0.4): 0.6
const addNegative = add(0.2, -0.4);
console.log("add(0.2, -0.4): ", addNegative); //add(0.2, -0.4): -0.2
const mulNum = mul(0.57, 100);
console.log("mul(0.57, 100): ", mulNum); //mul(0.57, 100): 57
const mulNegativ = mul(-0.57, 100);
console.log("mul(-0.57, 100): ", mulNegativ); //mul(-0.57, 100): -57
const subNum = sub(0.2, 0.4);
console.log("sub(0.2, 0.4): ", subNum); //sub(0.2, 0.4): -0.2
const subNegative = sub(0.2, -0.4);
console.log("sub(0.2, -0.4): ", subNegative); //sub(0.2, -0.4): 0.6
const divNum = div(0.57, 100);
console.log("div(0.57, 100): ", divNum); //div(0.57, 100): 0.0057
const divNegative = div(-0.57, 100);
console.log("div(-0.57, 100): ", divNegative); //div(-0.57, 100): -0.0057
const mulNum = mul(0.57, 100);
console.log("mul(0.57, 100): ", mulNum); //mul(0.57, 100): 57
const mulNegativ = mul(-0.57, 100);
console.log("mul(-0.57, 100): ", mulNegativ); //mul(-0.57, 100): -57
const divNum = div(0.57, 100);
console.log("div(0.57, 100): ", divNum); //div(0.57, 100): 0.0057
const divNegative = div(-0.57, 100);
console.log("div(-0.57, 100): ", divNegative); //div(-0.57, 100): -0.0057
```

@@ -65,8 +80,9 @@

```
import { scaleNum } from 'calculate-asmd'
scaleNum(0.57, 2) // 57
scaleNum(0.57, -2) // 0.0057
scaleNum(0.57, 0) // 0.57
import { scaleNum } from 'calculate-asmd'
scaleNum(0.57, 2) // 57
scaleNum(0.57, -2) // 0.0057
scaleNum(0.57, 0) // 0.57
```

@@ -87,1 +103,5 @@

[license-url]: https://img.shields.io/npm/l/calculate-asmd.svg
```
```

@@ -1,2 +0,2 @@

export const scaleNum: (Num: number | string, position: number | string) => number
export const scaleNum: (number: number | string, position: number | string) => number
export const add: (arg1: number | string, arg2: number | string) => number

@@ -3,0 +3,0 @@ export const sub: (arg1: number | string, arg2: number | string) => number