format($format); } } if (!function_exists('get_image_url')) { function get_image_url($path) { $baseUrl = config('app.image_url', null); if (!$baseUrl) { return null; } return rtrim($baseUrl, '/') . '/' . ltrim($path, '/'); } } if (!function_exists('full_url')) { function full_url($filepath) { $baseUrl = config('app.url'); $imageUrl = config('app.image_url'); // 优先使用图片专用域名 $domain = $imageUrl ? $imageUrl : $baseUrl; if ($domain) { // 去除域名末尾的斜杠,去除文件路径开头的斜杠,然后拼接 return rtrim($domain, '/') . '/' . ltrim($filepath, '/'); } return $filepath; } } // 多语言 if (!function_exists('lang')) { function lang($key) { $msg = __('message.' . $key); if ($msg === "message.{$key}") return $key; return $msg; } } // 读取系统设置 if (!function_exists('config_val')) { function config_val($field) { return ConfigService::model()::where('field', $field)->value('val') ?? ''; } } // 小数随机 if(!function_exists('random_float')){ function random_float($min, $max, $precision = 2) { $multiplier = pow(10, $precision); $intMin = $min * $multiplier; $intMax = $max * $multiplier; return mt_rand($intMin, $intMax) / $multiplier; } } if (!function_exists('retain_number')) { /** * 保留数字指定的小数位数(直接截断,不四舍五入) * * @param float|int|string $number 要处理的数字 * @param int $point 要保留的小数位数(默认2位) * @return float|string 返回处理后的数字(失败时返回原始输入) */ function retain_number($number, $point = 2) { // 验证小数位数参数 $point = (int)$point; if ($point < 0) { $point = 0; } // 非数字直接返回 if (!is_numeric($number)) { return $number; } $floatValue = (float)$number; // 如果是整数或小数位数为0,直接返回整数 if (is_int($number) || $point === 0) { return (float)floor($floatValue); } // 计算截断倍数(如 2位小数则乘以 100) $multiplier = pow(10, $point); // 直接截断小数部分 $truncated = floor($floatValue * $multiplier) / $multiplier; return $truncated; } } // 字符串格式化版本(保证小数位数,如 5 → "5.00") if (!function_exists('retain_number_format')) { function retain_number_format($number, $point = 2) { // $result = retain_number($number, $point); if (!is_numeric($number)) { return $number; } return number_format($number, $point, '.', ''); } }