JS-библиотека для решения задач точности во внешнем интерфейсе — math.js

JavaScript

Поскольку большая часть разрабатываемого в настоящее время программного обеспечения относится к проектам розничной торговли и общественного питания, требования к расчету суммы, естественно, будут относительно высокими. И у js всегда были недостатки в расчете точности, поэтому я рекомендую библиотеку классов —math.js

JS сложение, вычитание, умножение и деление

1. Арифметика сложения: 0,1+0,2

	console.log(0.1+0.2);
	结果是:0.30000000000000004

2. Арифметика вычитания: 0,8-0,7

	console.log(0.8-0.7)
	结果是:0.10000000000000009

3. Арифметика умножения: 5,10*100

	console.log(5.10*100)
	结果是:509.99999999999994

4. Арифметика с делением 6.10/0.1

	console.log(6.10/0.1)
	结果是:60.99999999999999

Результат операции JavaScript с числами с плавающей запятой неверен, поскольку проблема с хранением числа с плавающей запятой приводит к неправильному результату вычисления.

Math.js

Math.js— это расширенная математическая библиотека для JavaScript и Node.js. Он имеет гибкий синтаксический анализатор выражений, поддерживающий символьные вычисления, большое количество встроенных функций и констант, а также предоставляет интегрированное решение для обработки различных типов данных, таких как числа, большие числа, комплексные числа, дроби, единицы и матрицы, мощный и прост в использовании.

характерная черта

  • Поддерживает числа, большие числа, комплексные числа, дроби, единицы измерения, строки, массивы и матрицы.
  • Совместим со встроенной математической библиотекой JavaScript, использование математики такое же, низкий порог
  • Содержит гибкий анализатор выражений.
  • Выполните символьные вычисления.
  • Поставляется с множеством встроенных функций и констант.
  • Может также использоваться как приложение командной строки.
  • Работает на любом движке JavaScript.
  • Это легко расширить.
  • Открытый исходный код.

Помогите с уроком:

1. Традиционное использование, знакомство с math.js
    <!DOCTYPE HTML>
    <html>
    <head>
      <script src="https://unpkg.com/mathjs@7.0.1/dist/math.min.js" type="text/javascript"></script>
    </head>
    <body>
      <script type="text/javascript">
        const ans = math.add(0.1, 0.2)     //  0.30000000000000004
        console.log(math.format(ans, {precision: 14})) // '0.3'
        console.log(math.sqrt(4).toString()) // 2
      </script>
    </body>
    </html>
2. Эс модуль

установка нпм

	npm install mathjs

использовать

import { create, all } from 'mathjs'
const config = { 
  number: 'BigNumber',
  precision: 20
}
const math = create(all, config);
export default {
  methods: {
  	//开方
    numberSqrt: function(arg1){
    	return math math.sqrt(arg1)
    },
    //除
    numberExcept: function (arg1, arg2) {
      return math.divide(arg1, arg2);
    },
    //乘
    numberRide: function (arg1, arg2) {      
      return math.multiply(arg1, arg2);
    },
    //加
    numberAdd:function (arg1,arg2) {
    return math.add(arg1, arg2);
    }
    //减
    numberSub:function (arg1,arg2) {
    return math.add(arg1, -arg2);
    }
  }
}

math.js общие математические функции

<script type="text/javascript">
    // expressions
    console.log(math.evaluate('1.2 * (2 + 4.5)')) // 7.8
    console.log(math.evaluate('12.7 cm to inch')) // 5 inch
    console.log(math.evaluate('sin(45 deg) ^ 2')) // 0.5
    console.log(math.evaluate('9 / 3 + 2i')) // 3 + 2i
    console.log(math.evaluate('det([-1, 2; 3, 1])')) // -7
    
    // mixed use of different data types in functions
    console.log(math.add(5, [9, 6])) // number + Array, [14, 11]
    console.log(math.multiply(math.unit('5 mm'), 3)) // Unit * number,  15 mm
    console.log(math.subtract([2, 3, 4], 10)) // Array - number, [-8, -7, -6]
    console.log(math.add(math.matrix([4, 1]), [2, 9])) // Matrix + Array, [6, 10]	
    
    // chain operator
    console.log(math.chain(3)
        .add(4)
        .subtract(2)
        .done()) // 5

	console.log(math.chain( [[1, 2], [3, 4]] )
        .subset(math.index(0, 0), 8)
        .multiply(3)
        .done()) // [[24, 6], [9, 12]]
</script>