import type { IFormattedValue } from "../config/types"; /** * Форматирует число с разделителями тысяч * @param {IFormattedValue} params - параметры форматирования * @param {number | string} params.value - исходное число * @param {string} [params.separator=""] - разделительный символ или пробел * @returns {string} отформатированная строка числа */ const getFormatNumber = ({ value, separator = "", }: IFormattedValue): string => { // Обработка строковых значений с разделителями if (typeof value === "string" && /[\s.,]/.test(value)) { const cleanedValue = value.replace(/[\s.,]/g, ""); const num = parseFloat(cleanedValue); if (isNaN(num)) { return value; } value = num; } // Преобразование в число const num = typeof value === "string" ? parseFloat(value) : value; // Проверка на NaN после преобразования if (isNaN(num)) { return String(value); } // Разделение на целую и дробную части const [ integerPart, decimalPart ] = num.toString().split("."); // Форматирование целой части с разделителями const formattedInteger = integerPart.replace( // eslint-disable-next-line security/detect-unsafe-regex /\B(?=(\d{3})+(?!\d))/g, separator ); // Сборка результата return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger; }; export { getFormatNumber };