Не нашел ни одного удобного решения. Я представляю, что нужно делить на 10, 100, 1000, … , но надеюсь, что есть уже стандартная функция, которая позволит вернуть число знаков до запятой.
Вы такую знаете?)
Да, есть, эта функция - десятичный логарифм с округлением в меньшую сторону.
Как следует из определения данной функции - логарифм это показатель степени, в которую нужно возвести основание логарифма, чтобы получить аргумент.
В случае с десятичным логарифмом(логарифмом по основанию 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
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)
}
Примитивно))
Еще вариант простого решение этой задачи
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;
}
str.split(',').map(some => '${some}(${some.length})`)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу понять как работает этот код? Мы в цикле for создаём переменную cur и в условии проверяем ее наличие в объекте oНо ее там нет, условие должно...
Суть проблемы в том, что не рисуется ничего в canvasВ атрибут функции image1 передаю src и в консоли получаю "вход: (тут base64 изображения входного)",...
У меня есть двухсвязный список std::list как protected обьект в классе A: