mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-20 22:21:27 -05:00
* Initial * Saves preferences * Include TW * mapModePreferencesToModeList * mapPoolFromPreferences initial * Preference to map pool * Adjust seed * q.looking tests * adds about created map preferences to memento in the correct spot (two preferrers) * Failing test about modes * Mode preferences to memento * Remove old Plus Voting code * Fix seeding * find match by id via kysely * View map memento * Fix up map list generation logic * Mode memento info * Future match modes * Add TODO * Migration number * Migrate test DB * Remove old map pool code * createGroupFromPrevious new * Settings styling * VC to settings * Weapon pool * Add TODOs * Progress * Adjust mode exclusion policy * Progress * Progress * Progress * Notes in progress * Note feedback after submit * Textarea styling * Unskip tests * Note sorting failing test * Private note in Q * Ownerpicksmaps later * New bottom section * Mobile layout initial * Add basic match meta * Tabs initial * Sticky tab * Unseen messages in match page * Front page i18n * Settings i18n * Looking 18n * Chat i18n * Progress * Tranfer weapon pools script * Sticky on match page * Match page translations * i18n - tiers page * Preparing page i18n * Icon * Show add note right after report
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
export function roundToNDecimalPlaces(num: number, n = 2) {
|
|
return Number((Math.round(num * 10 ** n) / 10 ** n).toFixed(n));
|
|
}
|
|
|
|
export function cutToNDecimalPlaces(num: number, n = 2) {
|
|
const multiplier = 10 ** n;
|
|
const truncatedNum = Math.trunc(num * multiplier) / multiplier;
|
|
const result = truncatedNum.toFixed(n);
|
|
return Number(n > 0 ? result.replace(/\.?0+$/, "") : result);
|
|
}
|
|
|
|
export function secondsToMinutes(seconds: number) {
|
|
const minutes = Math.floor(seconds / 60);
|
|
const secondsLeft = seconds % 60;
|
|
return `${minutes}:${secondsLeft.toString().padStart(2, "0")}`;
|
|
}
|
|
|
|
export function secondsToMinutesNumberTuple(seconds: number) {
|
|
const minutes = Math.floor(seconds / 60);
|
|
const secondsLeft = seconds % 60;
|
|
return [minutes, secondsLeft] as const;
|
|
}
|
|
|
|
export function sumArray(arr: number[]) {
|
|
return arr.reduce((acc, curr) => acc + curr, 0);
|
|
}
|
|
|
|
export function averageArray(arr: number[]) {
|
|
return sumArray(arr) / arr.length;
|
|
}
|
|
|
|
export function safeNumberParse(value: string | null) {
|
|
if (value === null) return null;
|
|
|
|
const result = Number(value);
|
|
return Number.isNaN(result) ? null : result;
|
|
}
|