aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/parseint/index.html
blob: c92f886216af46fdb0b7cbcc68a54fbb51041437 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
---
title: parseInt()
slug: Web/JavaScript/Reference/Global_Objects/parseInt
tags:
  - JavaScript
  - Довідка
  - метод
translation_of: Web/JavaScript/Reference/Global_Objects/parseInt
---
<div>{{jsSidebar("Objects")}}</div>

<p>Функція <code><strong>parseInt()</strong></code> розбирає рядковий аргумент і повертає число з вказаною <a href="https://en.wikipedia.org/wiki/Radix">основою</a> системи числення.</p>

<div>{{EmbedInteractiveExample("pages/js/globalprops-parseint.html")}}</div>

<p class="hidden">код для цього інтерактивного прикладу зберігається  в репозиторії  GitHub .Якщо ви хочете внести свій внесок у проект інтерактивних прикладів, будь-ласка клонуйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> і присилайте нам pull request.</p>

<h2 id="Синтаксис">Синтаксис</h2>

<pre class="syntaxbox notranslate">parseInt(<em>string</em>, <em>radix</em>);</pre>

<h3 id="Параметри">Параметри</h3>

<dl>
 <dt><code>string</code></dt>
 <dd>Значення, яке розбиратиметься. Якщо цей аргумент не є рядком, тоді він буде перетворений на рядок абстрактною операцією <code><a href="https://tc39.es/ecma262/#sec-tostring">ToString</a></code>. Пробільні символи на початку аргументу ігноруються.</dd>
 <dt><code>radix</code>  {{optional_inline}}</dt>
 <dd>Ціле число між <code>2</code> і <code>36</code>, яке вказує <var>основу</var> (в математичних системах числення) значення <em><code>string</code></em>. Будьте обережні — воно <strong><em>не</em></strong> дорівнює за замовчуванням <code>10</code>!</dd>
 <dd class="blockIndicator warning"><a href="#Опис">Наведений нижче опис</a> поясює більш детально, що відбувається, якщо значення <em><code>radix</code></em> не надане.</dd>
</dl>

<h3 id="Повернене_значення">Повернене значення</h3>

<p>Число, отримане з наданого рядка <em><code>string</code></em>.</p>

<p>Або {{jsxref("NaN")}}, коли</p>

<ul>
 <li>значення <code>radix</code> менше за <code>2</code> чи більше за <code>36</code>, або</li>
 <li>перший непробільний символ не може бути перетворений на число.</li>
</ul>

<h2 id="Опис">Опис</h2>

<p>Функція <code>parseInt</code> перетворює перший аргумент на рядок, розбирає цей рядок, після чого повертає ціле число або <code>NaN</code>.</p>

<p>Якщо не <code>NaN</code>, повернене значення буде цілим числом, яке є першим аргументом, прочитаним як число у вказаній системі числення <code><var>radix</var></code>. (Наприклад, <code><var>radix</var></code>, що дорівнює <code>10</code>, перетворює перший аргумент на десяткове число, <code>8</code> - на вісімкове, <code>16</code> на шістнадцяткове, і т. д.)</p>

<p>Для основ, більших за <code>10</code>, літери англійського алфавіту позначають цифри, більші за <code>9</code>. Наприклад, для шістнадцяткових цифр (основа <code>16</code>) використовуються букви від <code>A</code> до <code>F</code>.</p>

<p>Якщо метод <code>parseInt</code> зустрічає символ, який не є числом у вказаній системі <code>radix</code>, він ігнорує цей символ та усі наступні символи та повертає ціле число, розібране до цієї позиції. <code>parseInt</code> обрізає числа до цілих значень. Пробільні символи попереду та в кінці є дозволеними.</p>

<p>Оскільки деякі числа використовують символ <code>e</code> у своєму рядковому представленні (наприклад, <strong><code>6.022e23</code></strong> для 6.022 × 10<sup>23</sup>), використання <code>parseInt</code> для обрізання чисел призведе до неочікуваних результатів при використанні на дуже великих чи дуже малих числах. <code>parseInt</code> не слід використовувати як заміну {{jsxref("Math.floor()")}}.</p>

<p>Якщо <code>radix</code> дорівнює <code>undefined</code>, <code>0</code> або його значення невизначене, JavaScript припускає наступне:</p>

<ol>
 <li>Якщо вхідний рядок <code>string</code> починається з <code>"0x"</code> або <code>"0X"</code> (нуль, за яким іде мала чи велика літера X), вважається, що <var>radix</var> дорівнює 16, а решта рядка розбирається як шістнадцяткове число.</li>
 <li>Якщо вхідний рядок <code>string</code> починається з <code>"0"</code> (нуль), вважається, що <var>radix</var> дорівнює <code>8</code> (вісімкова система) або <code>10</code> (десяткова). Яку саме основу буде обрано, залежить від реалізації. ECMAScript 5 пояснює, що <em>має</em> використовуватись <code>10</code> (десяткова система), але ще не усі переглядачі це підтримують. З цієї причини <strong>завжди вказуйте <code><var>radix</var></code> при використанні <code>parseInt</code></strong>.</li>
 <li>Якщо вхідний рядок <code>string</code> починається з будь-якого іншого значення, основа дорівнює <code>10</code> (десяткова).</li>
</ol>

<p>Якщо перша літера не може бути перетворена на число, <code>parseInt</code> вертає <code>NaN</code>.</p>

<p>Для арифметичних цілей, значення <code>NaN</code> не є числом в жодній системі числення. Ви можете викликати функцію {{jsxref("isNaN")}}, щоб визначити, чи результат <code>parseInt</code> дорівнює <code>NaN</code>. Якщо <code>NaN</code> передається у арифметичні операції, результатом операції також буде <code>NaN</code>.</p>

<p>Щоб перетворити число на його рядковий літерал у певній системі числення, використовуйте <code><em>вашеЧисло</em>.toString(radix)</code>.</p>

<div class="blockIndicator warning">
<p><strong>Застереження щодо {{jsxref("BigInt")}}</strong><code>parseInt</code> перетворює {{jsxref("BigInt")}} на {{jsxref("Число", "Number")}} та в процесі втрачає точність, оскільки нечислові значення в кінці аргументу, в тому числі "n", відкидаються.</p>
</div>

<h3 id="Вісімкові_інтерпретації_без_значення_radix">Вісімкові інтерпретації без значення radix</h3>

<p>Хоча це не схвалюється у ECMAScript 3 та заборонене у ECMAScript 5, багато реалізацій інтерпретують числові рядки, що починаються з <code>0</code>, як вісімкові. Наступне може перетворитись на вісімковий результат, а може й на десятковий. <strong>Завжди вказуйте <code><var>radix</var></code>, щоб запобігти цій ненадійній поведінці.</strong></p>

<pre class="brush: js notranslate">parseInt('0e0')  // 0
parseInt('08')   // 0, бо '8' не вісімкова цифра.</pre>

<p>Специфікація ECMAScript 5 функції <code>parseInt</code> більше не дозволяє реалізаціям сприймати рядки, що починаються з символу <code>0</code>, як вісімкові значення.</p>

<p>ECMAScript 5 зазначає:</p>

<blockquote>
<p>Функція <code>parseInt</code> створює цілочисельне значення, продиктоване інтерпретацією вмісту рядкового аргументу у відповідності до вказаної основи системи числення. Пробільний символ на початку рядка ігнорується. Якщо основа дорівнює <code>undefined</code> або <code>0</code>, вона вважається рівною <code>10</code>, окрім випадків, коли число починається з пар символів <code>0x</code> або <code>0X</code>, в такому випадку основа вважається рівною <code>16</code>.</p>
</blockquote>

<p>Це відрізняється від ECMAScript 3, де вісімкова інтерпретація просто <em>не схвалюється</em> (але дозволена).</p>

<p>У багатьох реалізаціях ця поведінка не адаптована станом на 2013 рік. І, оскільки старші веб-переглядачі мають підтримуватись, <strong>завжди вказуйте значення radix</strong>.</p>

<h3 id="Більш_строга_функція_розбору">Більш строга функція розбору</h3>

<p>Іноді корисно мати більш строгий спросіб розбору цілих чисел.</p>

<p>Регулярні вирази можуть стати в пригоді:</p>

<pre class="brush: js notranslate">function filterInt(value) {
  if (/^[-+]?(\d+|Infinity)$/.test(value)) {
    return Number(value)
  } else {
    return NaN
  }
}

console.log(filterInt('421'))                // 421
console.log(filterInt('-421'))               // -421
console.log(filterInt('+421'))               // 421
console.log(filterInt('Infinity'))           // Infinity
console.log(filterInt('421e+0'))             // NaN
console.log(filterInt('421hop'))             // NaN
console.log(filterInt('hop1.61803398875'))   // NaN
console.log(filterInt('1.61803398875'))      // NaN</pre>

<h2 id="Приклади">Приклади</h2>

<h3 id="Використання_parseInt">Використання parseInt</h3>

<p>Усі наступні приклади повертають <code>15</code>:</p>

<pre class="brush: js notranslate">parseInt('0xF', 16)
parseInt('F', 16)
parseInt('17', 8)
parseInt(021, 8)
parseInt('015', 10)   // але `parseInt(015, 10)` поверне 13
parseInt(15.99, 10)
parseInt('15,123', 10)
parseInt('FXX123', 16)
parseInt('1111', 2)
parseInt('15 * 3', 10)
parseInt('15e2', 10)
parseInt('15px', 10)
parseInt('12', 13)
</pre>

<p>Усі наступні приклади повертають <code>NaN</code>:</p>

<pre class="brush: js notranslate">parseInt('Привіт', 8) // Зовсім не число
parseInt('546', 2)    // Числа, інші, ніж 0 чи 1, недозволені у двійковій системі
</pre>

<p>Усі наступні приклади повертають <code>-15</code>:</p>

<pre class="brush: js notranslate">parseInt('-F', 16)
parseInt('-0F', 16)
parseInt('-0XF', 16)
parseInt(-15.1, 10)
parseInt('-17', 8)
parseInt('-15', 10)
parseInt('-1111', 2)
parseInt('-15e1', 10)
parseInt('-12', 13)
</pre>

<p>Усі наступні приклади повертають <code>4</code>:</p>

<pre class="brush: js notranslate">parseInt(4.7, 10)
parseInt(4.7 * 1e22, 10) // Дуже велике число стає 4
parseInt(0.00000000000434, 10) // Дуже маленьке число стає 4
</pre>

<p>Якщо число більше за 1e+21 (включно) або менше за 1e-7 (включно), метод поверне <code>1</code>. (при використанні основи 10).</p>

<pre class="brush: js notranslate">parseInt(0.0000001,10);
parseInt(0.000000123,10);
parseInt(1e-7,10);
parseInt(1000000000000000000000,10);
parseInt(123000000000000000000000,10);
parseInt(1e+21,10);</pre>

<p>Наступний приклад повертає <code>224</code>:</p>

<pre class="brush: js notranslate">parseInt('0e0', 16)
</pre>

<p>Значення {{jsxref("BigInt")}} втрачають точність:</p>

<pre class="brush: js notranslate">parseInt(900719925474099267n)
// 900719925474099300</pre>

<p>parseInt не працює з <a href="/uk/docs/Web/JavaScript/Reference/Lexical_grammar#Числові_роздільники">числовими роздільниками</a>:</p>

<pre class="brush: js notranslate">parseInt('123_456');
// 123
</pre>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-parseint-string-radix', 'parseInt')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>



<p>{{Compat("javascript.builtins.parseInt")}}</p>

<h2 id="Див._також">Див. також</h2>

<ul>
 <li>{{jsxref("Global_Objects/parseFloat", "parseFloat()")}}</li>
 <li>{{jsxref("Number.parseFloat()")}}</li>
 <li>{{jsxref("Number.parseInt()")}}</li>
 <li>{{jsxref("Global_Objects/isNaN", "isNaN()")}}</li>
 <li>{{jsxref("Number.toString()")}}</li>
 <li>{{jsxref("Object.valueOf")}}</li>
</ul>