From e79c89cd310a9058c105de27b93c3165c6f1cf8d Mon Sep 17 00:00:00 2001 From: chen Date: Fri, 18 Sep 2026 08:04:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(partner):=20=E4=BF=AE=E5=A4=8D=20PHP=208=20?= =?UTF-8?q?=E4=B8=8B=E5=BE=AE=E5=B0=8F=E6=B5=AE=E7=82=B9=E6=95=B0=E7=A7=91?= =?UTF-8?q?=E5=AD=A6=E8=AE=A1=E6=95=B0=E6=B3=95=E5=AF=BC=E8=87=B4=20bcmul?= =?UTF-8?q?=20=E5=8F=82=E6=95=B0=E6=A0=BC=E5=BC=8F=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=20500=20=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/shopro/service/partner/RateService.php | 15 +++++++++++++-- application/admin/controller/shopro/Dashboard.php | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/addons/shopro/service/partner/RateService.php b/addons/shopro/service/partner/RateService.php index 8c0b82d..6378b6d 100644 --- a/addons/shopro/service/partner/RateService.php +++ b/addons/shopro/service/partner/RateService.php @@ -41,11 +41,22 @@ class RateService public function calcRate($n = null) { $n = $n === null ? $this->countN() : intval($n); - $base = (float) PartnerConfig::get('partner_madow_base_rate', 0.00000075); + $rawBase = PartnerConfig::get('partner_madow_base_rate', '0.00000075'); + $base = is_numeric($rawBase) ? (float) $rawBase : 0.00000075; + // 关键防坑:PHP 8.0+ 下小于 0.0001 的浮点数转为 string 时会自动变成科学计数法 (如 "7.5E-7") + // 传给 bcmul() 会直接抛出 Fatal error: Argument #1 ($num1) is not well-formed + // 必须使用 number_format 格式化为无科学计数法的高精度十进制字符串 + $baseStr = number_format($base, 10, '.', ''); + $step = intval(PartnerConfig::get('partner_madow_step_orders', 1)); $step = $step > 0 ? $step : 1; $multiple = max(1, floor($n / $step)); - return function_exists('bcmul') ? (float) bcmul((string) $base, (string) $multiple, 10) : (float) ($base * $multiple); + $multipleStr = number_format($multiple, 0, '.', ''); + + if (function_exists('bcmul')) { + return (float) bcmul($baseStr, $multipleStr, 10); + } + return (float) ($base * $multiple); } public function countN() diff --git a/application/admin/controller/shopro/Dashboard.php b/application/admin/controller/shopro/Dashboard.php index 97bb983..8ad2978 100644 --- a/application/admin/controller/shopro/Dashboard.php +++ b/application/admin/controller/shopro/Dashboard.php @@ -235,7 +235,7 @@ class Dashboard extends Common foreach ($allAgents as $ag) { if ($filterCallback($ag)) { $uCount++; - $madowTotal = (float) bcadd((string)$madowTotal, (string)($ag->madow ?? 0), 8); + $madowTotal = round($madowTotal + (float) ($ag->madow ?? 0), 8); $uid = (int) $ag->user_id; // 收益按角色类型精准归集