Skip to content

Commit

Permalink
README enhancement (#22)
Browse files Browse the repository at this point in the history
  • Loading branch information
Leslie-Wong-H authored Apr 26, 2023
2 parents 0f68f8a + 3137ee1 commit 5fe6180
Show file tree
Hide file tree
Showing 6 changed files with 26,643 additions and 225 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,9 @@ jobs:
- name: Build
run: npm run build
- name: Test
run: npm test
run: npm test
- name: Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: unittests
1 change: 1 addition & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
127 changes: 127 additions & 0 deletions README_zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# JSBI-Calculator

[![License](https://img.shields.io/github/license/Leslie-Wong-H/jsbi-calculator.svg?style=flat-square)](https://github.com/Leslie-Wong-H/jsbi-calculator/blob/master/LICENSE)
[![Coverage](https://img.shields.io/codecov/c/github/Leslie-Wong-H/jsbi-calculator/main.svg?style=flat)](https://app.codecov.io/gh/Leslie-Wong-H/jsbi-calculator/branch/main)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/Leslie-Wong-H/jsbi-calculator/main.yml?branch=main&style=flat-square)](https://github.com/Leslie-Wong-H/jsbi-calculator/actions)
[![GitHub release](https://img.shields.io/github/release/Leslie-Wong-H/jsbi-calculator.svg)](https://github.com/Leslie-Wong-H/jsbi-calculator/releases/latest)
[![NPM](https://img.shields.io/npm/dw/jsbi-calculator)](https://www.npmjs.com/package/jsbi-calculator)

JSBI-Calculator是一个IE11兼容的计算器JS库组件,用于实现高精度(至多18位小数)大数值四则运算,基于由谷歌Chrome实验室出品的JSBI封装的BigDecimal。

该项目反哺[GoogleChromeLabs/jsbi](https://github.com/GoogleChromeLabs/jsbi/issues/79)作出了不凡贡献。

## 安装

```
> npm install jsbi-calculator
```

## 示例

![Showcase](https://i.loli.net/2021/12/03/aADG5LxcZ2fh1vS.png)

## 用法

> ES6模块:
```js
import JBC from "jsbi-calculator";

const { calculator } = JBC;

const expressionOne = "((10 * (24 / ((9 + 3) * (-2)))) + 17) + 5";
const resultOne = calculator(expressionOne);
console.log(resultOne);
// -> '12'

const max = String(Number.MAX_SAFE_INTEGER);
console.log(max);
// -> '9007199254740991'
const expressionTwo = `${max} + 2`;
const resultTwo = calculator(expressionTwo);
console.log(resultTwo);
// -> '9007199254740993'
```

> Node CommonJS模块:
```js
const JBC = require("jsbi-calculator");

const { calculator } = JBC;

const expressionOne = "((10 * (24 / ((9 + 3) * (-2)))) + 17) + 5";
const resultOne = calculator(expressionOne);
console.log(resultOne);
// -> '12'

const max = String(Number.MAX_SAFE_INTEGER);
console.log(max);
// -> '9007199254740991'
const expressionTwo = `${max} + 2`;
const resultTwo = calculator(expressionTwo);
console.log(resultTwo);
// -> '9007199254740993'
```

> 浏览器:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Jsbi-calculator Test</title>
<script src="https://cdn.jsdelivr.net/npm/jsbi-calculator/dist/jsbi-calculator-umd.js"></script>
</head>
<body></body>
<script type="text/javascript">
const expressionOne = "((10 * (24 / ((9 + 3) * (-2)))) + 17) + 5";
const resultOne = JBC.calculator(expressionOne);
console.log(resultOne);
// -> '12'
const userAgent = navigator.userAgent;
const isIE11 =
userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1;
let max;
// MAX_SAFE_INTEGER not available in IE11
max = isIE11 ? "9007199254740991" : String(Number.MAX_SAFE_INTEGER);
console.log(max);
// -> '9007199254740991'
const expressionTwo = max + " + 2";
const resultTwo = JBC.calculator(expressionTwo);
console.log(resultTwo);
// -> '9007199254740993'
</script>
</html>
```

## 注意

下面表格中的运算操作是有涉及到的。请注意,负数需要以`-`开头且需要用括号括起来,例如`(-11)`,正数不能以`+`号开头。

| 运算操作 | 运算符号 |
| -------- | ----------------------------------- |
| 加法 | `+` |
| 减法 | `-` |
| 乘法 | `*` |
| 除法 | `/` |
| 平方根 | JBC.BigDecimal.sqrt(num).toString() |

## 致谢

项目开发得到了下列资源的灵感启发。

[GoogleChromeLabs/jsbi](https://github.com/GoogleChromeLabs/jsbi)

[trincot's answer to _BigDecimal in JavaScript_](https://stackoverflow.com/a/66939244/8808175)

[LeetCode150 - Evaluate Reverse Polish Notation](https://leetcode.com/problems/evaluate-reverse-polish-notation/)

[Parsing math expressions with JavaScript - FreeCodeCamp](https://www.freecodecamp.org/news/parsing-math-expressions-with-javascript-7e8f5572276e/)

## [苍穹之下](https://github.com/Leslie-Wong-H/jsbi-calculator/blob/main/src/jsbi-calculator.ts)
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"build": "rm -rf tsc-out && tsc && for f in tsc-out/*.js; do mv -- \"$f\" \"${f%.js}.mjs\"; done && rollup --config rollup.config.js",
"build:win": "rmdir /s/q tsc-out && tsc && for %a in (tsc-out/*.js) do for /f \"tokens=1,* delims=.\" %b in (\"%~nxa\") do ren \"tsc-out\\%a\" \"%b.mjs\" && rollup --config rollup.config.js",
"test": "npm run test:cjs && npm run test:esm && npm run test:browser",
"test:cjs": "node test/test.js",
"test:cjs": "nyc --reporter=lcov mocha",
"test:esm": "node --experimental-modules test/test.mjs",
"test:browser": "node test_browser.js",
"lint": "eslint . --ext ts --fix",
Expand Down Expand Up @@ -52,6 +52,8 @@
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4",
"husky": "^4.3.8",
"mocha": "^10.2.0",
"nyc": "^15.1.0",
"prettier": "^2.3.2",
"request": "^2.88.2",
"rollup": "^1.19.4",
Expand Down
8 changes: 7 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# JSBI-Calculator

[![License](https://img.shields.io/github/license/Leslie-Wong-H/jsbi-calculator.svg?style=flat-square)](https://github.com/Leslie-Wong-H/jsbi-calculator/blob/master/LICENSE)
[![Coverage](https://img.shields.io/codecov/c/github/Leslie-Wong-H/jsbi-calculator/main.svg?style=flat)](https://app.codecov.io/gh/Leslie-Wong-H/jsbi-calculator/branch/main)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/Leslie-Wong-H/jsbi-calculator/main.yml?branch=main&style=flat-square)](https://github.com/Leslie-Wong-H/jsbi-calculator/actions)
[![GitHub release](https://img.shields.io/github/release/Leslie-Wong-H/jsbi-calculator.svg)](https://github.com/Leslie-Wong-H/jsbi-calculator/releases/latest)
[![NPM](https://img.shields.io/npm/dw/jsbi-calculator)](https://www.npmjs.com/package/jsbi-calculator)

JSBI-Calculator is an IE11-compatible calculator utility to perform arbitrary (up to 18 decimals) arithmetic computation, with the help of JSBI-based BigDecimal.

Remarkable contribution from this project to [GoogleChromeLabs/jsbi](https://github.com/GoogleChromeLabs/jsbi/issues/79)
Expand Down Expand Up @@ -120,4 +126,4 @@ Great inspiration by the following resources.

[Parsing math expressions with JavaScript - FreeCodeCamp](https://www.freecodecamp.org/news/parsing-math-expressions-with-javascript-7e8f5572276e/)

## Under the hood
## [Under the hood](https://github.com/Leslie-Wong-H/jsbi-calculator/blob/main/src/jsbi-calculator.ts)
Loading

0 comments on commit 5fe6180

Please sign in to comment.