Обрезать число до n-символов | JS

Рейтинг: -1Ответов: 1Опубликовано: 31.01.2023

Как обрезать Number до n-чисел без конвертации типов? Я знаю способ:

String(123456789).split(0, 8) -> 12345678

Но можно ли сделать то же самое без конвертации?

    const trimNumber = (n, k) => {
    for (; n > 10 ** k; n /= 10) {}
    return Math.floor(n);
};

const timNumber2 = (n, k) => {
    return Number(String(n).split(0, k));
}

const benckmark = (number) => {
    let std = {
        '1': 0,
        '2': 0
    };
    let min = {
        '1': 0,
        '2': 0
    };
    let max = {
        '1': 0,
        '2': 0
    };

    const results = Array(50000).fill(0).map((n, i) => {
        const pert1 = performance.now();
        const res = trimNumber(number, 15);
        const pert2 = performance.now() - pert1;

        std['1'] = (std['1'] + pert2) / 2;
        if (min['1'] > pert2) {
            min['1'] = pert2;
        }
        if (max['1'] < pert2) {
            max['1'] = pert2;
        }
        
        const pert3 = performance.now();
        const res2 = timNumber2(number, 15);
        const pert4 = performance.now() - pert1;

        std['2'] = (std['2'] + pert4) / 2;
        if (min['2'] > pert4) {
            min['2'] = pert4;
        }
        if (max['2'] < pert4) {
            max['2'] = pert4;
        }
        
        return {
            '1': res,
            '2': res2
        }
    });

    console.group("BENCHMARK RESULTS");
    console.log("Среднее время выполнения", std);
    console.log("Мин время выполнения", min);
    console.log("Макс время выполнения", max);
    console.log("Результаты выполнения", results);
    console.groupEnd();
}

benckmark(13513513513545343203513512315123135153145613515612315641231234352123)

Ответы

▲ 4Принят

Делите на 10 пока число не станет меньше 10k, результат округлите вниз. В результате будет не более k старших цифр исходного числа:

const trim = (n, k) => {
    const m = Math.round(10 ** k);
    for (; n >= m; n /= 10) {
    }
    return Math.floor(n);
};
    
for (let k = 10; k >= 0; --k) {
    console.log(k, trim(123456789, k));
}