utils.ts 888 B

123456789101112131415161718192021222324252627282930313233
  1. export const PRECISION = 10e-5;
  2. export const clamp = (value: number, min: number, max: number) => {
  3. return Math.min(Math.max(value, min), max);
  4. };
  5. export const round = (
  6. value: number,
  7. precision: number,
  8. func: "round" | "floor" | "ceil" = "round",
  9. ) => {
  10. const multiplier = Math.pow(10, precision);
  11. return Math[func]((value + Number.EPSILON) * multiplier) / multiplier;
  12. };
  13. export const roundToStep = (
  14. value: number,
  15. step: number,
  16. func: "round" | "floor" | "ceil" = "round",
  17. ): number => {
  18. const factor = 1 / step;
  19. return Math[func](value * factor) / factor;
  20. };
  21. export const average = (a: number, b: number) => (a + b) / 2;
  22. export const isFiniteNumber = (value: any): value is number => {
  23. return typeof value === "number" && Number.isFinite(value);
  24. };
  25. export const isCloseTo = (a: number, b: number, precision = PRECISION) =>
  26. Math.abs(a - b) < precision;