feature/fetch-fonts #14
10
src/shared/lib/utils/clampNumber/clampNumber.ts
Normal file
10
src/shared/lib/utils/clampNumber/clampNumber.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* Clamp a number within a range.
|
||||||
|
* @param value The number to clamp.
|
||||||
|
* @param min minimum value
|
||||||
|
* @param max maximum value
|
||||||
|
* @returns The clamped number.
|
||||||
|
*/
|
||||||
|
export function clampNumber(value: number, min: number, max: number): number {
|
||||||
|
return Math.min(Math.max(value, min), max);
|
||||||
|
}
|
||||||
17
src/shared/lib/utils/getDecimalPlaces/getDecimalPlaces.ts
Normal file
17
src/shared/lib/utils/getDecimalPlaces/getDecimalPlaces.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* Get the number of decimal places in a number
|
||||||
|
*
|
||||||
|
* For example:
|
||||||
|
* - 1 -> 0
|
||||||
|
* - 0.1 -> 1
|
||||||
|
* - 0.01 -> 2
|
||||||
|
* - 0.05 -> 2
|
||||||
|
*
|
||||||
|
* @param step - The step number to analyze
|
||||||
|
* @returns The number of decimal places
|
||||||
|
*/
|
||||||
|
export function getDecimalPlaces(step: number): number {
|
||||||
|
const str = step.toString();
|
||||||
|
const decimalPart = str.split('.')[1];
|
||||||
|
return decimalPart ? decimalPart.length : 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
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));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user