/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/helpers/NumHelper.php
237 строк
6 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\helpers; use Yii; use yii\helpers\VarDumper; /** * Вспомогательный класс для работы с числами * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2020 */ class NumHelper { /** * Вычисления процента от максимума * * @param int|float $your - полученный результат * @param int|float $max - максимально возможный результат * @param int $precision - точность округления * * @return float */ public static function percent($your, $max, $precision = 1) { if ($max > 0) { return round($your * 100 / $max, $precision); } else { return 0.0; } } /** * Вычисления доли от 100 % * * @param $a * @param $b * @param int $precision * @return float */ public static function dolya($a, $b, $precision = 1) { return round($a * $b / 100, $precision); } /** * Вычисление количества в процентах от максимума * * @param $percent * @param $max * @return float */ public static function count($percent, $max) { return ceil($max / 100 * $percent); } /** * Расчёт стоимости скидки * * @param float $price Стоимость * @param float $discount Скидка/наценка * @param float $vat НДС * @param float $precision Количество знаков после запятой * @return array */ public static function discount($price, $discount = 0.0, $vat = 0.0, $precision = 2) { $cost = (float)($price * ((100.0 + $discount) / 100.0)); $new_vat = self::costVat($cost, $vat); $result = [ 'price' => $price, 'vat' => $new_vat, 'cost' => $cost + $new_vat, 'discount' => $discount, 'old_vat' => $vat ]; Yii::debug(VarDumper::dumpAsString($result)); return $result; } /** * Расчет стоимости НДС * @param $cost * @param $vat * @return string|null */ public static function costVat($cost, $vat) { return self::toString($cost * $vat / 100.0, 2, false, 2); } /** * Преобразование числа в строковое представление * * @param mixed $number - число * @param null $precision * @param bool $zero * @param mixed $fill Количество знаков после запятой * @return string|null */ public static function toString($number, $precision = null, $zero = true, $fill = 0) { if ($number === null) { return null; } else { if ($precision != null) { $precision = (int)$precision; if ($zero) { return trim(sprintf("%6.{$precision}f", $number)); } else { if ($fill) { return trim(sprintf("%6.{$fill}f", round($number, $precision))); } else { return (string)round($number, $precision); } } } else { return (string)$number; } } } /** * Преобразовать число в float-string * * @param $point * @return mixed */ public static function toPoint($point) { return str_replace(',', '.', self::toString($point)); } /** * Проверить является ли число 0 * * @param $float * @param float $e * @return bool */ public static function isZero($float, $e = 0.0001) { return abs($float) < $e; } /** * Два числа одинаковые c с погрешностью не более 1% * * @param $a * @param $b * @param float $e * @return bool */ public static function isEqual($a, $b, $e = 0.02) { return abs($a - $b) < $e; } /** * Форматирование с ведущими нулями * @param $val * @return string */ public static function zero($val) { if ($val < 10) { return '0' . $val; } return $val; } public static function formatMemory(int $memory) { if ($memory >= 1024 * 1024 * 1024) { return sprintf('%.1f GiB', $memory / 1024 / 1024 / 1024); } if ($memory >= 1024 * 1024) { return sprintf('%.1f MiB', $memory / 1024 / 1024); } if ($memory >= 1024) { return sprintf('%d KiB', $memory / 1024); } return sprintf('%d B', $memory); } /** * Очистка из номера всех не нужных символов * * @param $number * @return mixed */ public static function filter($number) { // Remove all non-digit characters from the number return preg_replace('/\D+/', '', $number); } /** * Перевести значение в цветовое обозначение * * @param $value - значение * @param bool|FALSE $invert - инвертировать цвета * @param int $min - минимальное значение * @param int $max - максимальное значение * @return string - имя класса для цветого использования */ public static function toColor($value, $invert = false, $min = 50, $max = 98) { if ($value >= 0) { if ($value < $min) { if ($invert) { return 'danger'; } else { return 'success'; } } elseif ($value >= $min && $value < $max) { return 'warning'; } else { if ($invert) { return 'success'; } else { return 'danger'; } } } } }