fix(partner): 优化马豆汇率高精度自适应展示,防止微小汇率被截断四舍五入

这个提交包含在:
chen
2026-09-18 09:58:34 +08:00
父节点 96eb5a87b3
当前提交 c23544ebf8
共有 5 个文件被更改,包括 132 次插入 和 5 次删除

查看文件

@@ -161,7 +161,7 @@ class PartnerClean extends Command
$rateService = new \addons\shopro\service\partner\RateService();
$resetRate = $rateService->currentRate();
$resetN = $rateService->countN();
$formattedRate = number_format($resetRate, 8, '.', '');
$formattedRate = \addons\shopro\service\partner\IdentityService::formatRate($resetRate);
$output->writeln("\n========================================================");
$output->writeln(" 重置后指标核对:");

查看文件

@@ -274,7 +274,7 @@ class DailySettleService
'order_count' => $orderCount,
'order_count_n' => $orderCountN,
'gmv' => number_format($gmv, 2, '.', ''),
'rate' => number_format($rate, 8, '.', ''),
'rate' => IdentityService::formatRate($rate),
'madow' => [
'pool' => IdentityService::formatMadow($madowPool),
'user_count' => $tasterCount,

查看文件

@@ -97,7 +97,14 @@ class IdentityService
if ($value === null || $value === '') {
$value = PartnerConfig::get('partner_madow_base_rate', '0.00000075');
}
return number_format((float) $value, 8, '.', '');
$floatVal = (float) $value;
if ($floatVal <= 0) {
return '0';
}
// 高精度十进制展开,防止科学计数法 (如 7.15E-7) 并避免微小汇率被 8 位截断四舍五入
$formatted = number_format($floatVal, 12, '.', '');
$trimmed = rtrim(rtrim($formatted, '0'), '.');
return $trimmed !== '' ? $trimmed : '0';
}
public static function attachAgent($agent, $rate = null)

查看文件

@@ -46,7 +46,7 @@ class RateService
// 关键防坑: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, '.', '');
$baseStr = number_format($base, 12, '.', '');
$step = intval(PartnerConfig::get('partner_madow_step_orders', 1));
$step = $step > 0 ? $step : 1;
@@ -54,7 +54,7 @@ class RateService
$multipleStr = number_format($multiple, 0, '.', '');
if (function_exists('bcmul')) {
return (float) bcmul($baseStr, $multipleStr, 10);
return (float) bcmul($baseStr, $multipleStr, 12);
}
return (float) ($base * $multiple);
}