Skip to main content

index/functions/safeDivideWithMinimum.md

safeDivideWithMinimum(numerator, denominator, minimum?, fallback?): BigNumber

Divide with zero fallback AND minimum threshold check

Performs safe division with two layers of protection:

  1. Returns fallback if denominator is zero
  2. Returns minimum threshold if computed result is less than minimum

This prevents calculations from producing unrealistic micro-values (e.g., APR calculations that shouldn't return 0.0000001%).

Consolidates 3 partial occurrences across APR and portfolio calculations.

Parameters​

ParameterTypeDescription
numeratorstring | number | BigNumberDividend
denominatorstring | number | BigNumberDivisor
minimum?string | number | BigNumberMinimum threshold (default: "0", meaning no minimum)
fallback?string | number | BigNumberValue to return if denominator is zero (default: "0")

Returns​

BigNumber

The quotient, minimum threshold if result is too small, or fallback if denominator is zero

Throws​

Error if minimum is negative or minimum > maximum representable value

Example​

// Safe division with zero fallback
const ratio = safeDivideWithMinimum('100', '0', undefined, '0');
// Returns: "0" (denominator is zero)

// Enforce minimum APR (never report less than 0.01%)
const apr = safeDivideWithMinimum(
feeAmount,
liquidityValue,
'0.0001' // Minimum 0.01% APR
);

// Threshold prevents micro-values
const tiny = safeDivideWithMinimum('1', '1000000', '0.001');
// Result 0.000001 is < minimum 0.001, so returns 0.001

// Normal division (result meets threshold)
const normal = safeDivideWithMinimum('100', '10', '0.001');
// Result 10 > minimum 0.001, so returns 10