UNPKG

@synotech/utils

Version:

a collection of utilities for internal use

83 lines (71 loc) 2.21 kB
import BigNumber from 'bignumber.js'; class MathCryptography { constructor() { BigNumber.config({ DECIMAL_PLACES: 20, ROUNDING_MODE: BigNumber.ROUND_HALF_UP, }); } add(...args: string[] | number[]): string { let result = new BigNumber(0); args.forEach((arg: number | string) => { result = result.plus(new BigNumber(arg)); }); return result.toString(); } subtract(...args: string[] | number[]): 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 result.toString(); } multiply(...args: string[] | number[]): string { let result = new BigNumber(1); args.forEach((arg: number | string) => { result = result.times(new BigNumber(arg)); }); return result.toString(); } divide(...args: string[] | number[]): 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 result.toString(); } isZero(number: BigNumber): boolean { return number.isZero() || number.isNegative(); } greaterThan(left: string, right: string): boolean { const leftNumber = new BigNumber(left); const rightNumber = new BigNumber(right); return leftNumber.gt(rightNumber); } greaterThanOrEqualTo(left: string, right: string): boolean { const leftNumber = new BigNumber(left); const rightNumber = new BigNumber(right); return leftNumber.gte(rightNumber); } lessThanOrEqualTo(left: string, right: string): boolean { const leftNumber = new BigNumber(left); const rightNumber = new BigNumber(right); return leftNumber.lte(rightNumber); } lessThan(left: string, right: string): boolean { const leftNumber = new BigNumber(left); const rightNumber = new BigNumber(right); return leftNumber.lt(rightNumber); } } const mathCryptography = new MathCryptography(); export { MathCryptography, mathCryptography };