Испытание "Сколько цифр?"


#22

У меня такое решение:

var number = 6567;
var quantity = 0;

while (Math.trunc(number) != 0) {
quantity++;
number /= 10;
}
console.log(quantity);


#23

Попробуй вставить number = 65478.
quantity получится на одну цифру больше.
Это не верное решение.

В этом ключе я решил так:
var number = 6567;
var quantity = 0;

while (Math.trunc(number) != 0) {
quantity++;
number /= 10;
}
console.log(quantity);


#24

var number = 123;
var quantity = 0;
var k=1;
for (var i = 1; number / k >= 1; i++) {
k*=10
quantity ++;
}

Я это сделал! Всё работает идеально))


#25

Мне кажется в данном задании это самое верное решение. Посмотрев другие ответы, которые мне показались слишком огромными, этот вариант явно выигрывает. Но, я, например, не знала о таком варианте.


#26

Ну самое оптимальное решение через .length и приведение в строку, но если этого не знать, то вот:

моё рабочее
if (number != 0) {
  for (var i = 1; Math.abs(number / i) >= 1; i*= 10) {
    quantity++;
    } 
} else {quantity = 1;}
console.log('Количество циферей: ' + quantity);

Добавлены проверки на 0 и отрицательные числа, буду рад если кто дополнит проверкой на целые числа.


#27
var number = 123;
var quantity = 0;

while (number >= 1) {
  number/= 10;
  quantity++;
}

#28

минимализм while (number>10){number/=10; quantity++}


#29

Вопрос, скорее всего, к разработчикам (но это не точно). Почему без явного указания метода console.log в консоль выводится неверный результат:

без

с


#30

Не разработчик: возможно это связано с тем что ++ постфиксный, а не префиксный
но это не точно :slight_smile:

и quantity изменится не в момент наращивания, а после

Поэтому некоторые разработчики предпочитают такую запись

var number = 1234;
var quantity = 0;
 
for (var i=1; Math.abs(number / i) >= 1; i *= 10) {
	quantity += 1;
}

#31

смотрите как выходит с постфиксами (q++): в конце 4 итерации возвращает значение 3, увеличивает его на единицу и записывает в ячейку quantity уже 4.
если бы была префиксная форма (++q), то сначала увеличивает на единицу, возвращает 4 и записывает в переменную 4.
в консоли вы естественно видите “возврат значения”.
если же вы применяете метод console.log(value), то он вам вернет value, вопрос в какой момент вы хотите его получить.
проверьте например так:

префиксная форма
var number = 1234;
var quantity = 0;
 
for (var i=1; Math.abs(number / i) >= 1; i *= 10) {
	console.log(++quantity);
}
постфиксная форма
var number = 1234;
var quantity = 0;
 
for (var i=1; Math.abs(number / i) >= 1; i *= 10) {
	console.log(quantity++);
}

Заметьте, что если вы поставите console.log(quantity) после цикла, то он и там и там даст 4.


#32

Все, поняла) Спасибо огромное!


#33

На мой взгляд, данный код работает только на 50%.
Ведь если будет дробное число, то выдаст, что символов явно больше, за счет того, что будет так же посчитана точка, которая разделяет целое от дробного.

У меня получилось что-то в таком духе:

var number = 1234.532;
var quantity = 0;

if (number%1 !== 0) {
console.log(quantity = number.toString().length - 1);
}else{
console.log(quantity = number.toString().length);
}