@synotech/utils
Version:
a collection of utilities for internal use
83 lines (71 loc) • 2.21 kB
text/typescript
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 };