乐趣区

关于javascript:JSBICalculator兼容IE11的高精度大数值四则计算JS库组件

JSBI-Calculator

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

该我的项目反哺 GoogleChromeLabs/jsbi 作出了不凡奉献。

我的项目地址:

https://github.com/Leslie-Wong-H/jsbi-calculator

装置

> npm install jsbi-calculator

示例

用法

ES6 模块:

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 模块:

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'

浏览器:

<!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

trincot’s answer to BigDecimal in JavaScript

LeetCode150 – Evaluate Reverse Polish Notation

Parsing math expressions with JavaScript – FreeCodeCamp

天穹之下

退出移动版