fui-material 2.2.13 → 2.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,22 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Выполняет
|
|
2
|
+
* Выполняет банковское округление числа (по ГОСТ Р 8.736-2011) с учётом практических особенностей,
|
|
3
|
+
* используемых в финансовых калькуляторах.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
* - Если дробная часть < 0.5 → округляется вниз
|
|
6
|
-
* - Если дробная часть > 0.5 → округляется вверх
|
|
7
|
-
* - Если дробная часть = 0.5 → округляется к ближайшему чётному числу
|
|
5
|
+
* ### Математика банковского округления
|
|
8
6
|
*
|
|
9
|
-
*
|
|
7
|
+
* Банковское округление (англ. *bankers' rounding*, *round-to-even*) — метод, минимизирующий накопление ошибок
|
|
8
|
+
* при многократных операциях. Отличается от стандартного округления только при **ровно 5**:
|
|
10
9
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* | Условие | Действие |
|
|
11
|
+
* |--------|---------|
|
|
12
|
+
* | `roundingDigit > 5` | Округление вверх |
|
|
13
|
+
* | `roundingDigit < 5` | Округление вниз |
|
|
14
|
+
* | `roundingDigit = 5` и **есть ненулевые цифры после** (`hasTail`) | Округление вверх |
|
|
15
|
+
* | `roundingDigit = 5` и **все нули после** | Округляем так, чтобы **последняя сохраняемая цифра была чётной** |
|
|
16
|
+
*
|
|
17
|
+
* **НО:** в банковских системах и калькуляторах **для отрицательных чисел** при `=5` — **всегда вверх**,
|
|
18
|
+
* чтобы избежать "потери копейки" в пользу клиента.
|
|
19
|
+
*
|
|
20
|
+
* ---
|
|
21
|
+
*
|
|
22
|
+
* ### Примеры
|
|
23
|
+
* - `1.2345` → `1.234` (до 3 знаков): `lastKept = 4` (чёт) → вниз
|
|
24
|
+
* - `1.2355` → `1.236` (до 3 знаков): `lastKept = 5` (нечёт) → вверх → `6` (чёт)
|
|
25
|
+
* - `-1.225` → `-1.23` (до 2 знаков): отрицательное + `=5` → вверх
|
|
26
|
+
* - `2.5` → `2` (до 0): `lastKept = 2` (чёт) → вниз
|
|
27
|
+
* - `-2.5` → `-3` (до 0): отрицательное + `=5` → вверх
|
|
28
|
+
*
|
|
29
|
+
* @param value - Число или строка, которую нужно округлить.
|
|
30
|
+
* @param decimals - Количество знаков после запятой (по умолчанию 2).
|
|
31
|
+
* @returns Округлённое число или `NaN`, если вход некорректен.
|
|
14
32
|
*
|
|
15
33
|
* @example
|
|
16
|
-
* fBankRound(1.225, 2)
|
|
17
|
-
* fBankRound(1.
|
|
18
|
-
* fBankRound(2.5, 0)
|
|
19
|
-
* fBankRound(
|
|
34
|
+
* fBankRound(1.225, 2); // → 1.22
|
|
35
|
+
* fBankRound(-1.225, 2); // → -1.23
|
|
36
|
+
* fBankRound(2.5, 0); // → 2
|
|
37
|
+
* fBankRound(-2.5, 0); // → -3
|
|
20
38
|
*/
|
|
21
39
|
declare function fBankRound(value: number | string, decimals?: number): number;
|
|
22
40
|
export default fBankRound;
|