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
- * Выполняет российское банковское округление (ГОСТ Р 8.736-2011).
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
- * @param value - Число (или строка), которое нужно округлить.
12
- * @param decimals - Количество знаков после запятой, до которых округлять.
13
- * @returns Округлённое число.
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) // → 1.22
17
- * fBankRound(1.235, 2) // → 1.24
18
- * fBankRound(2.5, 0) // → 2
19
- * fBankRound(3.5, 0) // → 4
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fui-material",
3
- "version": "2.2.13",
3
+ "version": "2.2.15",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",