ParseInt'i çağırırken neden radix parametresini kullanmamız gerekiyor?


Yanıtlar:


103

Tamsayıyı her zaman 10 tabanına ayırmak istemeyebilirsiniz, bu nedenle tabanı sağlamak, diğer sayı sistemlerini belirlemenize izin verir.

Radix, tek bir basamak için değer sayısıdır. Hexidecimal 16 olur. Sekizli 8 olur, İkili 2 olur ve bu böyle devam eder ...

In parseInt()fonksiyonu, bunu tedarik etmeden radix ima etmek için yapabileceğiniz birkaç şey vardır. Kullanıcı kurallardan biriyle eşleşen ancak açıkça ifade etmediği bir dize giriyorsa bunlar da aleyhinize olabilir. Örneğin:

// Numbers with a leading 0 used a radix of 8 (octal) before ECMAScript 5.
// These days, browsers will treat '0101' as decimal.
var result = parseInt('0101');

// Numbers that start with 0x use a radix of 16 (hexidecimal)
var result = parseInt('0x0101');

// Numbers starting with anything else assumes a radix of 10
var result = parseInt('101');

// Or you can specify the radix, in this case 2 (binary)
var result = parseInt('0101', 2);

2
Yani parseInt ('0101') 101 veya 65 mi verir?
Vivekh

7
@Vivekh - Cevabı ilk yayınladığımda 2011'i destekliyordu. Google Chrome'da hızlı bir kontrol, biraz değiştiklerini gösteriyor gibi görünüyor. parseInt('0101')şimdi geri dönüyor 101. Farklı tarayıcıların farklı davranışları olabilir. Güvenilir sonuçlar için daima tabanı dahil edin.
Justin Nießner


En yeni dokümantasyon, ES 5'in hiçbir radixin 10'da geçme ile aynı şekilde ele alınmaması gerektiğini belirtmesidir, ancak eski tarayıcı desteği için yine de onu geçmeniz konusunda sizi uyarır.
Juan Mendes

1
Her zaman parseInt(x, 0)şu anda hatırlayamadığım bir nedenle kullandım .. Bu parseInt(x, 10)şu anda merak
ettiğimle

35

Çünkü gibi bir dize numaranız varsa 0700ve çıktının tamsayı olmasını 700istiyorsanız parseInt(), bunun sekizlik yerine ondalık bir sayı olduğunu bildirmeniz gerekir .

console.log(parseInt("0700"));
// 448

// I really wanted decimal (base 10)
console.log(parseInt("0700", 10));
// 700

// What is this? Binary, Decimal, Octal?
console.log(parseInt("0110"));
// 72

// as binary
console.log(parseInt("0110", 2));
// 6
Not Sorunuzun yalnızca yarısını yanıtladım. Bir tabanın gerçekte ne olduğuna dair iyi tanımlar için diğerlerine bakın.


1
Ayrıca, ikili parseInt ('10101', 2)
Joe

1
console.log (parseInt ("0700")); geri dönüyor // 700 448 değil.
Naren

@Naren 8 yıl önce bunu çalıştırdığım tarayıcı konsolunda 448 idi. Modern Chrome'da ve Node'da da bugün 700 aldım, ama belki o zamanlar tanımsız bir davranıştı.
Michael Berkowski

@MichaelBerkowski Son zamanlarda bu farkı fark ettim - görünüşe göre ES6 sekizlik sayılar 0oyerine0
Sᴀᴍ Onᴇᴌᴀ

7

Radix, bir numaralandırma sisteminin temelidir. Sonsuz sayıda sayısal sistem vardır, ancak çoğu insanın aşina olduğu sistem 10 tabanı (ondalık) ve 2 tabanı (ikili).

Sayısal değerler, farklı temellerde farklı yorumlanabilir. Örneğin, ikilik tabandaki 10 sayısı, ondalık tabanda 2 olarak gösterilebilir.

Durumunda parseInt(), sayı tabanı kullanılacak söz konusu üssü belirlemenizi sağlar. Varsayılan olarak, 10 tabanı kullanılır.

Ancak, taban 10 kullanılırken bile, taban her zaman belirtilmelidir.

parseInt("010") // 8 döndürür

İlk bakışta, ifadenin 10 döndürmesini bekleyebilirsiniz. Radix'in açık kullanımı kafa karışıklığını önlemeye yardımcı olacaktır:

parseInt("010", 10) // Döndürür: 10


4

Kök, sayı sisteminin temel numarasıdır: http://en.wikipedia.org/wiki/Radix

Normalde, tabanı yalnızca 10'dan farklı olmasını istiyorsanız belirtmeniz gerekir. Daha spesifik olarak ( http://www.w3schools.com/jsref/jsref_parseInt.asp adresinden ):

Radix parametresi atlanırsa, JavaScript aşağıdakileri varsayar:

Dize "0x" ile başlıyorsa, taban 16'dır (onaltılık) Dize "0" ile başlıyorsa, taban 8'dir (sekizlik). Bu özellik kullanımdan kaldırılmıştır Eğer dizi başka bir değerle başlıyorsa, radix 10'dur (ondalık)


2

Sadece soruyu net bir şekilde yanıtlayan bazı ek bilgiler eklemek:

Radix tanımsızsa veya 0 ise (veya yoksa), JavaScript aşağıdakileri varsayar:

  • [...]
  • Giriş dizesi "0" ile başlıyorsa, radix sekiz (sekizlik) veya 10'dur (ondalık). Tam olarak hangi tabanın seçildiği uygulamaya bağlıdır. ECMAScript 5, 10'un (ondalık) kullanıldığını belirtir, ancak henüz tüm tarayıcılar bunu desteklememektedir. Bu nedenle, parseInt'i kullanırken her zaman bir radix belirtin.
  • [...]

Kaynak: MDN parseInt ()


2

Bu sadece benim fikrim, ancak "radix kullanmamız gerektiği" fikri hızla modası geçmiş hale geliyor. Sorun gerçekten bir süre önce gerçekti çünkü BT dünyasının dışındaki insanlar genellikle ondalık sayılar dışında sayı gösterimleri kullanmazlar ve çoğu zaman "010" gibi sıfır dolgulu ondalık sayılar sağlarlar. Ancak, JS'de ECMAScript 6 sekizlik sayılar, ECMAScript 5 ve 3'te olduğu gibi sadece "0" değil, "0o" ile öneklendiğinden, IE ailesini hedeflemezseniz (bu şu anda nadir bir durum değildir) radix'i atlayabilirsiniz. güvenli bir şekilde.


1

Radix parametresi, hangi sayı sisteminin kullanılacağını belirtmek için kullanılır, örneğin, 16'lık bir tabanda (onaltılık), dizedeki sayının onaltılık bir sayıdan onluk bir sayıya ayrıştırılması gerektiğini belirtir.

Radix parametresi atlanırsa, JavaScript aşağıdakileri varsayar:

Dize "0x" ile başlıyorsa, taban 16'dır (onaltılık)

Dize "0" ile başlıyorsa, radix 8'dir (sekizlik). Bu özellik kullanımdan kaldırıldı

Dize başka bir değerle başlıyorsa, radix 10'dur (ondalık)

Kaynak W3Schools


1

PaseInt () ' de radix nedir ?

parseInt()Fonksiyonu bir dizi ayrıştırır ve bir tamsayı döndürür. Bu için ikinci argüman alır radix , dizede sayı tabanını belirtir . Sayı tabanı arasında bir tam sayı olabilir 2ve 36.

İşlev çağrısı şöyle görünür (Sözdizimi):

parseInt(string, radix);

Radix kavramını açıklığa kavuşturmak için bazı örnekler

Örnek 1:

var a = parseInt("11", 2);

Sayı tabanı değişkeni "11" olduğunu söylüyor ikili sistemi veya baz 2 . Bu nedenle, bu örnek "11" dizesini 3 tam sayıya dönüştürür.

Örnek 2:

var a = parseInt("10011", 16);

Burada radix , bunun onaltılık bir sayıparseInt() olduğunu söyler ve bu nedenle tamsayı olarak,1001165553

Temel olarak, uzun lafın kısası, radix argümanı, parseInt()1. parametre olarak aktarılan dizenin belirli bir sisteme (ikili, onaltılık vb.) Ait olduğunu ve son ürün olarak bir tam sayıya dönüştürülmesi gerektiğini söyler .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.