Чому нам потрібно використовувати параметр radix під час виклику parseInt?


Відповіді:


103

Можливо, вам не завжди хочеться проаналізувати ціле число на базове число 10, тому введення radix дозволяє вказати інші системи числення.

Радікс - це кількість значень для однієї цифри. Шістнадцяткове число буде 16. Восьмеричне буде 8, двійкове буде 2, і так далі ...

У parseInt()функції є кілька речей, які ви можете зробити, щоб натякнути на радікс, не подаючи його. Вони також можуть працювати проти вас, якщо користувач вводить рядок, який відповідає одному з правил, але прямо не означає. Наприклад:

// 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
Тож parseInt ('0101') дає 101 чи 65?
Vivekh

7
@Vivekh - Раніше це було в 2011 році, коли я спочатку розміщував відповідь. Швидка перевірка в Google Chrome, схоже, свідчить про те, що вони трохи змінилися. parseInt('0101')тепер повертається 101. Однак різні браузери можуть мати різну поведінку. Завжди включайте радікс для надійних результатів.
Джастін Нісснер,

@Vivekh - Ви можете побачити найновішу документацію на веб-сайті developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Джастін Нісснер,

Найновіша документація полягає в тому, що ES 5 вказує, що жоден радікс не повинен розглядатися так само, як передача в 10, але попереджає, що ви все одно повинні передавати його для підтримки старих браузерів.
Хуан Мендес,

1
Я завжди використовував parseInt(x, 0)з якихось причин, які зараз не пам’ятаю .. чи це дорівнює, parseInt(x, 10)мені зараз цікаво ...
OZZIE

35

Оскільки, якщо у вас є рядок, наприклад, 0700і ви хочете, щоб результат був цілим числом, 700вам потрібно повідомити, parseInt()що це десяткове число, а не вісімкове.

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
Примітка. Я відповів лише на половину вашого запитання. Зверніться до інших, щоб отримати точні визначення того, що насправді є радіус.


1
Крім того, двійковий parseInt ('10101', 2)
Джо

1
console.log (parseInt ("0700")); повертається // 700 НЕ 448.
Naren

@Naren 8 років тому це було 448 в будь-якій консолі браузера, в якій я запустив це. У сучасному Chrome та Node я також отримав сьогодні 700, але, можливо, це була невизначена поведінка на той час.
Michael

@MichaelBerkowski Я останнім часом помічав цю різницю - очевидно, восьмеричні числа ES6 починаються 0oзамість0
Sᴀᴍ

7

Radix - основа системи числення. Існує нескінченна кількість числових систем, але ті, з якими знайомі більшість людей, - це база 10 (десяткова) і база 2 (двійкова).

Числові значення можна інтерпретувати по-різному в різних базах. Наприклад, число 10 у двійковому вигляді може бути представлене як 2 у десятковому.

У випадку parseInt(), радікс дозволяє вказати основу, яка буде використовуватися. За замовчуванням використовується радіус 10.

Однак радіус слід завжди вказувати, навіть коли використовується база 10. Розглянемо випадок

parseInt("010") // Повертає 8

На перший погляд, ви можете очікувати, що оператор поверне 10. Явне використання radix допоможе уникнути плутанини:

parseInt("010", 10) // Повернення: 10


4

Радікс - це базовий номер системи числення: http://en.wikipedia.org/wiki/Radix

Зазвичай вам потрібно вказати радіус, лише якщо ви хочете, щоб він відрізнявся від 10. Більш конкретно (з http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Якщо параметр radix опущений, JavaScript передбачає таке:

Якщо рядок починається з "0x", радіус дорівнює 16 (шістнадцятковий) Якщо рядок починається з "0", радіус дорівнює 8 (восьмеричному). Ця функція застаріла Якщо рядок починається з будь-якого іншого значення, радіус дорівнює 10 (десятковий)


2

Просто додайте додаткову інформацію, яка чітко відповідає на питання:

Якщо radix невизначений або 0 (або відсутній), JavaScript передбачає таке:

  • [...]
  • Якщо вхідний рядок починається з "0", радіус дорівнює восьми (вісімковій) або 10 (десятковій). Точно вибраний радіус залежить від реалізації. ECMAScript 5 визначає, що використовується 10 (десятковий), але ще не всі браузери підтримують це. З цієї причини завжди вказуйте радікс при використанні parseInt.
  • [...]

Джерело: MDN parseInt ()


2

Це лише моя думка, але думка, що "нам потрібно використовувати radix" швидко застаріває. Проблема справді була актуальною деякий час тому, тому що люди за межами ІТ-світу зазвичай не використовують цифрові позначення, крім десяткових, і досить часто надають десяткові числа, заповнені нулем, як "010". Але оскільки вісімкові числа ECMAScript 6 у JS мають префікс "0o", а не просто "0", як це було в ECMAScript 5 і 3. Отже, якщо ви не націлюєтесь на сімейство IE (це не рідкісна ситуація зараз), ви можете пропустити radix безпечно.


1

Параметр radix використовується, щоб вказати, яку систему числення використовувати, наприклад, радіус 16 (шістнадцятковий) вказує на те, що число в рядку має бути проаналізовано із шістнадцяткового числа до десяткового числа.

Якщо параметр radix опущений, JavaScript передбачає таке:

Якщо рядок починається з "0x", радіус дорівнює 16 (шістнадцятковий)

Якщо рядок починається з "0", радіус дорівнює 8 (вісімковій). Ця функція застаріла

Якщо рядок починається з будь-якого іншого значення, радіус дорівнює 10 (десятковий)

Джерело W3Schools


1

Що таке radix у paseInt ()?

parseInt()Функція аналізує рядок і повертає ціле число. Він приймає другий аргумент для radix , який визначає основу числа в рядку . Radix може бути цілим числом між 2і 36.

Виклик функції виглядає так (Синтаксис):

parseInt(string, radix);

Кілька прикладів для уточнення поняття радікс

Приклад 1:

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

Radix змінна говорить , що «11» знаходиться в двійковій системі, або підставою 2 . Отже, цей приклад перетворює рядок "11" у ціле число 3.

Приклад 2:

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

Тут радікс повідомляє, parseInt()що 10011це шістнадцяткове число, і, отже, у цілому числу воно перетворюється на65553

В основному, коротко кажучи, аргумент radix повідомляє, parseInt()що рядок, переданий як 1-й параметр, є певною системою (двійковою, шістнадцятковою тощо), і її потрібно перетворити на ціле число як кінцевий продукт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.