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
|
---
title: Math.round()
slug: Web/JavaScript/Reference/Global_Objects/Math/round
tags:
- JavaScript
- Math
- Method
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Math/round
---
<div>{{JSRef("Global_Objects", "Math")}}</div>
<h2 id="Summary">Сводка</h2>
<p>Метод <strong><code>Math.round()</code></strong> возвращает число, округлённое к ближайшему целому.</p>
<h2 id="Syntax">Синтаксис</h2>
<pre class="syntaxbox"><code>Math.round(<var>x</var>)</code></pre>
<h3 id="Parameters">Параметры</h3>
<dl>
<dt><code>x</code></dt>
<dd>Число.</dd>
</dl>
<h2 id="Description">Описание</h2>
<p>Если дробная часть числа больше, либо равна 0,5, аргумент будет округлён до ближайшего большего целого. Если дробная часть числа меньше 0,5, аргумент будет округлён до ближайшего меньшего целого.</p>
<p>Поскольку метод <code>round()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.round()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
<h2 id="Examples">Примеры</h2>
<h3 id="Example:_Using_Math.round">Пример: использование метода <code>Math.round()</code></h3>
<pre class="brush: js">// Вернёт значение 20
x = Math.round(20.49);
// Вернёт значение 21
x = Math.round(20.5);
// Вернёт значение -20
x = Math.round(-20.5);
// Вернёт значение -21
x = Math.round(-20.51);
// Вернёт значение 1 (!)
// Обратите внимание на ошибку округления из-за неточности арифметики с плавающей запятой
// Сравните этот результат с результатом Math.round(1.005, -2) из следующего примера
x = Math.round(1.005*100)/100;
</pre>
<h3 id="Example:_Decimal_rounding">Пример: корректировка округления десятичных дробей</h3>
<pre class="brush: js">// Замыкание
(function() {
/**
* Корректировка округления десятичных дробей.
*
* @param {String} type Тип корректировки.
* @param {Number} value Число.
* @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).
* @returns {Number} Скорректированное значение.
*/
function decimalAdjust(type, value, exp) {
// Если степень не определена, либо равна нулю...
if (typeof exp === 'undefined' || +exp === 0) {
return Math[type](value);
}
value = +value;
exp = +exp;
// Если значение не является числом, либо степень не является целым числом...
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
return NaN;
}
// Сдвиг разрядов
value = value.toString().split('e');
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
// Обратный сдвиг
value = value.toString().split('e');
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}
// Десятичное округление к ближайшему
if (!Math.round10) {
Math.round10 = function(value, exp) {
return decimalAdjust('round', value, exp);
};
}
// Десятичное округление вниз
if (!Math.floor10) {
Math.floor10 = function(value, exp) {
return decimalAdjust('floor', value, exp);
};
}
// Десятичное округление вверх
if (!Math.ceil10) {
Math.ceil10 = function(value, exp) {
return decimalAdjust('ceil', value, exp);
};
}
})();
// Округление к ближайшему
Math.round10(55.55, -1); // 55.6
Math.round10(55.549, -1); // 55.5
Math.round10(55, 1); // 60
Math.round10(54.9, 1); // 50
Math.round10(-55.55, -1); // -55.5
Math.round10(-55.551, -1); // -55.6
Math.round10(-55, 1); // -50
Math.round10(-55.1, 1); // -60
Math.round10(1.005, -2); // 1.01 -- сравните этот результат с результатом Math.round(1.005*100)/100 выше
// Округление вниз
Math.floor10(55.59, -1); // 55.5
Math.floor10(59, 1); // 50
Math.floor10(-55.51, -1); // -55.6
Math.floor10(-51, 1); // -60
// Округление вверх
Math.ceil10(55.51, -1); // 55.6
Math.ceil10(51, 1); // 60
Math.ceil10(-55.59, -1); // -55.5
Math.ceil10(-59, 1); // -50
</pre>
<h2 id="Specifications">Спецификации</h2>
{{Specifications}}
<h2 id="Browser_compatibility">Совместимость с браузерами</h2>
<p>{{Compat}}</p>
<h2 id="See_also">Смотрите также</h2>
<ul>
<li>{{jsxref("Math.abs()")}}</li>
<li>{{jsxref("Math.ceil()")}}</li>
<li>{{jsxref("Math.floor()")}}</li>
<li>{{jsxref("Math.sign()")}} {{experimental_inline}}</li>
<li>{{jsxref("Math.trunc()")}} {{experimental_inline}}</li>
</ul>
|