Subring kullanarak 4 basamaklı rasgele sayı oluşturmak

Aşağıdaki kodu çalıştırmaya çalışıyorum:

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

2. satırda undefined bir işlev değildir gibi bir hata alıyorum, ancak alert (a) yapmaya çalıştığımda bir şey var. Burada yanlış olan ne?

8
Math.floor bir sayı döndürür. Sayıların substring yöntemi yoktur.
katma yazar Felix Kling, kaynak
uyarısı (a) 'nın nesi vardır?
katma yazar Sumner Evans, kaynak

6 cevap

Bunun nedeni a 'un bir sayı olması, bir dize değil. Muhtemelen yapmak istediğin şey şunun gibi:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var val = Math.floor(1000 + Math.random() * 9000);
console.log(val);
</div> </div>
  • Math.random() will generate a floating point number in the range [0, 1) (note that 1 is excluded from the range).
  • Multiplying by 9000 results in a range of [0, 9000).
  • Adding 1000 results in a range of [1000, 10000).
  • Flooring chops off the decimal value to give you an integer. Note that it does not round.

Genel Durum

[X, y) aralığında bir tam sayı oluşturmak istiyorsanız, aşağıdaki kodu kullanabilirsiniz:

Math.floor(x + (y - x) * Math.random());
39
katma
0123 gibi sıfır ile başlayan bir kodu yeniden oluşturamıyorum.
katma yazar 5ervant, kaynak
@ 5ervant, bu 3 basamaklı bir sayı olacaktır. (Matematiksel olarak, lider 0 önemli değil.)
katma yazar Sumner Evans, kaynak

Bu, alt dizeyi kullanarak 4 basamaklı rasgele sayı (0000-9999) oluşturur:

var seq = (Math.floor(Math.random() * 10000) + 10000).toString().substring(1);
console.log(seq);
2
katma

<div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code">

$( 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>
</div> </div>
1
katma
Bunun erkaner'in çözümünden farkı nedir? Burada $ (document) .ready çağrısı gerekli değildir.
katma yazar Felix Kling, kaynak
Bir matematik mantığı yaptığınızda muhtemelen int veya double olarak bir veri türü alacağınızı hatırlayın, bu nedenle sonucu subring işlevi tarafından işlenecek dizgeye dönüştürmelisiniz, umarım bu yardımcı olur
katma yazar Isaac Stevens, kaynak
Bunu jQuery kodunda kullanmanız durumunda, ancak haklısınız aksi halde gereksizdir.
katma yazar Isaac Stevens, kaynak

Bu şekilde 4 basamaklı bir şekilde .substring (startIndex, uzunluk) alabilirsiniz; bu, .substring (0, 4) 'da olur. .substring() 'ı kullanabilmek için .toString() ' ı kullanarak a 'ı dizeye dönüştürmeniz gerekir. Sonunda, parseInt komutunu kullanarak elde edilen çıktıyı tamsayıya dönüştürebilirsiniz:

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

 a =  parseInt(a);

 alert(a);

https://jsfiddle.net/v7dswkjf/

0
katma

Sorun şu ki, a bir sayıdır. Bir sayıya substring uygulayamazsınız, bu nedenle sayıyı dizeye dönüştürmeniz ve işlevi uygulamanız gerekir.

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

var a = Math.floor(100000 + Math.random() * 900000);
a = a.toString();
a = a.substring(-2);
0
katma
Demo, çözümünüzün bir uzunluk 6 dizisi ürettiğini açıkça gösteriyor.
katma yazar Felix Kling, kaynak
Peki, OP 4 haneli bir sayı oluşturmak istiyor.
katma yazar Felix Kling, kaynak
evet yapmaya çalıştığım şey bu
katma yazar Shelly, kaynak

a öğeniz bir sayıdır. substring işlevini kullanabilmek için önce bir string olması gerekir.

var a = (Math.floor(100000 + Math.random() * 900000)).toString();
a = a.substring(-2);
0
katma
Aynı zamanda bir sayı değil, bir dize oluşturur.
katma yazar Felix Kling, kaynak
Bu, 4 yerine 6 basamaklı bir sayı oluşturur.
katma yazar Sumner Evans, kaynak