Skip to content

简单小巧支持浮点数精度的 JS 四则运算工具方法库

License

Notifications You must be signed in to change notification settings

lzwme/asmd-calc

Repository files navigation

@lzwme/asmd-calc

@lzwme/asmd-calc

build status NPM version node version npm download GitHub issues GitHub forks GitHub stars license MIT

简体中文

A short and concise JavaScript library for the four fundamental operations of arithmetic, which supports the addition, subtraction, multiplication and division calculation of floating-point precision.

Features

  • Short and sharp. It only includes the calculation of addition, subtraction, multiplication and division. The core code is less than 100 lines. There is no other dependency.
  • High execution performance. Only the four operations that can be accurately expressed by the front end are considered to realize simple logic and better execution performance than the open source library with rich and complex functions (see Benchmark for details).
  • Accurate and stable. The accumulation of many years of practical experience in the development of several financial trading systems covers various common calculation use case error scenarios.

Not Applicable

  • For numerical processing involving very large numbers that front-end can not be accurately represented.
  • Complex mathematical scientific calculation.

These libraries are recommended:

Install

# npm
npm i @lzwme/asmd-calc
# yarn
pnpm add @lzwme/asmd-calc
# pnpm
pnpm add @lzwme/asmd-calc

Useage

1. Calculation example using simple tool method

es module

import { add } from '@lzwme/asmd-calc';

console.log(add(0.1, 0.2, 0.3));
// => 0.6

commonjs

const calc = require('@lzwme/asmd-calc');

console.log(calc.add(0.1, 0.2, 0.3));
// => 0.6

2. Calculation example using chain operation

es module

import { AsmdCalc } from '@lzwme/asmd-calc';

const a = new AsmdCalc(0);
console.log(+a.add(0.1).add(0.2, 0.3));
// => 0.6

const b = new AsmdCalc(0.3);
  b.add(0.1, 0.2)
    .add(0.1)
    .sub(0.1, 0.2)
    .sub(0.1)
    .div(0.3)
    .mul(0.3);
console.log(+b);
// => 0.3
console.log(b.value);
// => 0.3

commonjs

const AsmdCalc = require('@lzwme/asmd-calc').AsmdCalc;

const calc = new AsmdCalc(0);
console.log(calc.add(0.1).add(0.2, 0.3));
// => 0.6

API

  • add(...args); - Addition
  • sub(...args); - Subtraction
  • mul(...args); - Multiplication
  • div(...args); - Division
  • keepDotLength(value, len, isRounding = false): number; - Keep N decimal places
  • toFixed(value, len): string; - Similar to Number.prototype.toFixed, but fixed precision of the result
  • getDecimalLen(num): number; - Get the decimal length
  • toNonExponential(num): string; - Convert to string format of unscientific counting method

Development and testing

  • Development
pnpm install
pnpm start
  • Testing
npm test
npm run benchmark
  • Build
npm run build

Benchmark

npm run benchmark

See:Benchmark

The following results are the time-consuming comparison of executing 10000 * N times on the same machine:

type/timeConst jsRaw asmd-calc mathjs
add-10000 19.225ms 169.535ms 415.145ms
sub-10000 16.269ms 34.827ms 171.263ms
mul-10000 18.518ms 51.625ms 235.868ms
div-10000 27.025ms 79.504ms 300.706ms

Pre execution of 1000000 times and then stats time-consuming of execution of 10000 * N times:

type/timeConst jsRaw asmd-calc mathjs
add-10000 7.768ms 155.836ms 362.819ms
sub-10000 8.339ms 25.147ms 155.611ms
mul-10000 9.995ms 35.685ms 224.357ms
div-10000 15.666ms 77.407ms 280.322ms

Benchmark Details

random:

type/timeConst [jsRawCalc] [asmdCalc] [decimal] [mathjs]
add-10000 4.973ms 144.934ms 192.637ms 363.513ms
sub-10000 6.971ms 21.84ms 65.373ms 165.045ms
mul-10000 8.45ms 36.014ms 107.898ms 223.708ms
div-10000 14.427ms 64.409ms 154.766ms 290.645ms

decimal:

type/timeConst [jsRawCalc] [asmdCalc] [decimal] [mathjs]
add-10000 0.248ms 16.958ms 30.875ms 55.538ms
sub-10000 0.462ms 22.529ms 32.719ms 46.321ms
mul-10000 0.232ms 18.006ms 34.765ms 46.195ms
div-10000 0.519ms 17.37ms 36.031ms 47.271ms

integer:

type/timeConst [jsRawCalc] [asmdCalc] [decimal] [mathjs]
add-10000 0.172ms 0.681ms 10.248ms 35.004ms
sub-10000 0.816ms 1.069ms 12.736ms 32.836ms
mul-10000 0.178ms 0.733ms 13.827ms 33.486ms
div-10000 0.488ms 0.699ms 19.847ms 42.217ms

References

License

@lzwme/asmd-calc is released under the MIT license.

该插件由志文工作室开发和维护。