Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как посчитать количество знаков ДО запятой?

#javascript


Не нашел ни одного удобного решения. Я представляю, что нужно делить на 10, 100,
1000, … , но надеюсь, что есть уже стандартная функция, которая позволит вернуть число
знаков до запятой.

Вы такую знаете?)
    


Ответы

Ответ 1



Да, есть, эта функция - десятичный логарифм с округлением в меньшую сторону. Как следует из определения данной функции - логарифм это показатель степени, в которую нужно возвести основание логарифма, чтобы получить аргумент. В случае с десятичным логарифмом(логарифмом по основанию 10) - то, в какую степень нужно возвести 10, чтобы получить аргумент. UPD: после комментария господина @Akina и добавления ограничений ответ чуть усложнился: let count = n => { n = 1 + Math.log10(n*n) / 2; return Math.max(n - n % 1, 1); }; console.log(count(10230.4)); // 5 console.log(count(-0.0000004)); // 1 console.log(count(-1.4)); // 1 console.log(count(NaN)); // NaN console.log("---"); let numberCount = n => 1 + Math.max(Math.floor(Math.log10(Math.abs(n))), 0); console.log(numberCount(1023.4)); // 4 console.log(numberCount(-0.004)); // 1 console.log(numberCount(-1.4)); // 1 console.log(numberCount(NaN)); // NaN ——- Так же можно работать со строкой, пожалуй этот метод будет короче всего: let numberCount = n => Math.abs(n).toFixed().length; console.log(numberCount(1023.4)); // 4 console.log(numberCount(-0.004)); // 1 console.log(numberCount(1.4)); // 1 console.log(numberCount(NaN)); // 3 ——- Рекурсивный метод: let numberCount = (n,c) => Math.abs(n) < 1 ? (c||1) : numberCount(n/10, (c||0)+1); console.log(numberCount(1023.4)); // 4 console.log(numberCount(-0.004)); // 1 console.log(numberCount(1.4)); // 1 console.log(numberCount(NaN)); // stack overflow PS: и в любом случае не понятно что делать с NaN

Ответ 2



var rest = -123123.12312 if (isNaN(rest)){ console.log("NaN") }else { var c = "" + rest var ce = c.split('.') var ress = ce[0].replace(/[^0-9]/g, '') console.log(ress.length) } Примитивно))

Ответ 3



Еще вариант простого решение этой задачи function lenSymbolBeforeDot(num){ let res = 0; if(isNaN(num) || !isFinite(num)){ // Проверяем, число ли return -1; } let getNum = String(num).match(/^-?([0-9]+)/); if(getNum && getNum[1]) res = getNum[1].length; return res; }

Ответ 4



str.split(',').map(some => '${some}(${some.length})`)

Комментариев нет:

Отправить комментарий