hyoka
v1.2.0
Published
A simple math expression parser and evaluator
Downloads
730
Maintainers
Readme
hyoka
hyoka is a simple math expression parser and evaluator for JavaScript and TypeScript. it uses decimal.js to ensure precision of floating point calculations.
Features
- Supports implicit multiplication and parenthesis grouping
- Binary and unary operators are supported
- Supports mathematical functions
- Precision and rounding mode can be configured
Installation
This library can be used in both node.js and in the browser.
Using npm:
npm install hyoka
Using yarn:
yarn add hyoka
in the browser:
- UMD
<script src="https://cdn.jsdelivr.net/npm/hyoka@latest/dist/umd/hyoka.js"></script>
- ESM
<script src="https://cdn.jsdelivr.net/npm/hyoka@latest/dist/esm/hyoka.mjs" type="module"></script>
Usage
// using ES6 import
import {Expression} from 'hyoka';
// or using require
const { Expression } = require('hyoka');
new Expression('0.1 + 0.2').evaluate(); // 0.3
new Expression('2 * 6 / 3').evaluate(); // 4
// using unary prefix operators
new Expression('- 1 + 2').evaluate(); // 1
new Expression('+ 1 - - 2').evaluate(); // 3
// implicit multiplication
new Expression('2(6 / 3)').evaluate(); // 4
//Trig Functions
new Expression('sin(π)').evaluate(); // 0
new Expression('cos(pi / 2)').evaluate(); // -0.5
// Even more complex expressions
new Expression('2(4(6 / 3 + 2) + 2^3 / - 2(2.5!))').evaluate(); //5.413192236417259652
Configuration
hyoka configuration extends that of decimal.js. this means that all configuration options of decimal.js are available. the following configuration options are available:
precision
: the number of digits of precision to userounding
: the rounding mode to usemodulo
: the modulo to usetoExpNeg
: the exponent of 10 to use for negative zerotoExpPos
: the exponent of 10 to use for positive zerominE
: the minimum exponent valuemaxE
: the maximum exponent valuecrypto
: whether to use the crypto module for random number generationangles
: the unit of angles to use for trig functions
The config options can be set using the config
method on the Expression
class:
import {Expression} from 'hyoka';
Expression.config({
precision: 20,
rounding: 4,
angles: 'degrees'
});
new Expression('sin(30)').evaluate(); // 0.5