2015-04-15 5 views
4

Я пытаюсь выполнить код ниже:генерировать 4 цифры случайное число с помощью подстроку

var a = Math.floor(100000 + Math.random() * 900000); 
a = a.substring(-2); 

Я получаю сообщение об ошибке, как undefined is not a function в строке 2, но когда я пытаюсь сделать alert(a), это что-то. Что здесь не так?

+2

Что 'предупреждение (а) 'есть? –

+0

'Math.floor' возвращает ** номер **. Числа не имеют метода подстроки. –

ответ

29

Это потому, что a это число, а не строка. То, что вы, вероятно, хотите сделать что-то вроде этого:

var val = Math.floor(1000 + Math.random() * 9000); 
 
console.log(val);

  • Math.random() сгенерирует число с плавающей точкой в ​​диапазоне [0, 1) (заметим, что 1 исключается из диапазона).
  • Умножение на 9000 результатов в диапазоне [0, 9000].
  • Добавление 1000 результатов в диапазоне [1000, 10000).
  • Напольное покрытие отбрасывает десятичное значение, чтобы дать вам целое число. Обратите внимание, что он не раунд.

Общий случай

Если вы хотите создать целое число в диапазоне [х, у), вы можете использовать следующий код:

Math.floor(x + (y - x) * Math.random()); 
0

Ваш номер a - это номер. Для того, чтобы иметь возможность использовать функцию substring, он должен быть string первым, попробуйте

var a = (Math.floor(100000 + Math.random() * 900000)).toString(); 
a = a.substring(-2); 
+0

Это генерирует число с 6 цифрами, а не 4. –

+0

Оно также не создает число, а строку. –

0

Вы можете получить 4-значный номер .substring(startIndex, length), который будет в вашем случае .substring(0, 4). Чтобы иметь возможность использовать .substring(), вам нужно будет преобразовать a в строку с помощью .toString(). В конце концов, вы можете преобразовать полученный вывод в целое число с помощью parseInt:

var a = Math.floor(100000 + Math.random() * 900000) 
a = a.toString().substring(0, 4); 

a = parseInt(a); 

alert(a); 

https://jsfiddle.net/v7dswkjf/

0

Проблема заключается в том, что a является числом. Вы не можете применить substring к числу, поэтому вам нужно преобразовать число в строку, а затем применить функцию.

DEMO: https://jsfiddle.net/L0dba54m/

var a = Math.floor(100000 + Math.random() * 900000); 
a = a.toString(); 
a = a.substring(-2); 
+4

Ваша демонстрация ясно показывает, что ваше решение создает строку длиной 6. –

+0

да, что я пытаюсь сделать – Shelly

+3

Ну, OP хочет создать 4-значное число. –

1

$(document).ready(function() { 
 
    
 
    var a = Math.floor(100000 + Math.random() * 900000); 
 
    a = String(a); 
 
    a = a.substring(0,4); 
 
    alert("valor:" +a); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

+0

должен был помнить, что когда вы выполняете математическую логику, вы, вероятно, получите тип данных как int или double, поэтому вам нужно преобразовать результат в строку, чтобы обрабатывать функцию подстроки, надеюсь, что это поможет –

+0

Как это отличается от решение erkaner? Здесь нет необходимости в вызове '$ (document) .ready'. –

+0

Thats в случае, если вы используете его в коде jquery, но вы правы, иначе нет необходимости –

2

Это создаст 4-значного случайное число (0000-9999), используя подстроку:

var seq = (Math.floor(Math.random() * 10000) + 10000).toString().substring(1); 
console.log(seq); 
Смежные вопросы