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