@ssense/number-utils
Usage
Decimal
The type allows to explicitely define precision in contracts/interfaces.
import { Decimal } from '@ssense/number-utils';
export interface OrderTaxes {
code: string;
rate: Decimal<6>;
totalAmount: Decimal<2>;
details: {
rate: Decimal<6>;
name: string;
amount: Decimal<2>;
}[];
}
ToDecimal
Why use this function: Naive implementations like parseFloat(num.toFixed(2))
will lead to rounding inconsistencies. eg. parseFloat(436.905.toFixed(2)) = 436.90 instead of 436.91
ToDecimal rounds precisely by acounting for floating point arithmetic inconsistencies. It returns Decimal.
import { NumberUtils } from '@ssense/number-utils';
const subtotal = 75;
const taxRate = 0.14975;
const total = subtotal * (1 + taxRate);
const displayedTotal = NumberUtils.toDecimal<2>(total, 2);
If interested in learning more on how this works: