UNPKG

@synotech/utils

Version:

a collection of utilities for internal use

55 lines (48 loc) 1.5 kB
import BigNumber from 'bignumber.js'; class MathCurrency { constructor() { BigNumber.config({ DECIMAL_PLACES: 2, ROUNDING_MODE: BigNumber.ROUND_HALF_UP, }); } add(...args: number[] | string[]): string { let result = new BigNumber(0); args.forEach((arg: number | string) => { result = result.plus(new BigNumber(arg)); }); return parseFloat(result.toString()).toFixed(2).toString(); } subtract(...args: number[] | string[]): string { if (args.length < 2) { throw new Error('Subtraction requires at least two arguments'); } let result = new BigNumber(args[0]); for (let i = 1; i < args.length; i++) { result = result.minus(new BigNumber(args[i])); } return parseFloat(result.toString()).toFixed(2).toString(); } multiply(...args: number[] | string[]): string { let result = new BigNumber(1); args.forEach((arg: number | string) => { result = result.times(new BigNumber(arg)); }); return parseFloat(result.toString()).toFixed(2).toString(); } divide(...args: number[] | string[]): string { if (args.length < 2) { throw new Error('Division requires at least two arguments'); } let result = new BigNumber(args[0]); for (let i = 1; i < args.length; i++) { if (args[i] === 0) { throw new Error('Division by zero'); } result = result.dividedBy(new BigNumber(args[i])); } return parseFloat(result.toString()).toFixed(2).toString(); } } const mathCurrency = new MathCurrency(); export { MathCurrency, mathCurrency };