import { getDecimalPlaces } from '$shared/lib/utils'; /** * Round a value to the precision of the given step * * This fixes floating-point precision errors that occur with decimal steps. * For example, with step=0.05, adding it repeatedly can produce values like * 1.3499999999999999 instead of 1.35. * * We use toFixed() to round to the appropriate decimal places instead of * Math.round(value / step) * step, which doesn't always work correctly * due to floating-point arithmetic errors. * * @param value - The value to round * @param step - The step to round to (defaults to 1) * @returns The rounded value */ export function roundToStepPrecision(value: number, step: number = 1): number { if (step <= 0) { return value; } const decimals = getDecimalPlaces(step); return parseFloat(value.toFixed(decimals)); }