- 更新多个控制器和服务,使用 LotterySettings 服务获取彩票相关配置,如默认币种、开奖间隔、下注窗口等,提升代码一致性与可维护性。 - 移除 .env.example 中不再使用的配置项,建议通过后台管理进行设置。
48 lines
1.4 KiB
PHP
48 lines
1.4 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace App\Support;
|
||
|
||
use App\Services\LotterySettings;
|
||
|
||
/**
|
||
* 将「最小货币单位」整数格式化为展示用字符串(不改变业务数字,仅格式化)。
|
||
*
|
||
* 拆分位数由 {@see config('lottery.ui.format.currency.decimals')} 决定,默认 2(即 ÷100)。
|
||
*/
|
||
final class CurrencyFormatter
|
||
{
|
||
public static function fromMinor(int|string|null $minor): string
|
||
{
|
||
if ($minor === null || $minor === '') {
|
||
return self::formatMinorInt(0);
|
||
}
|
||
|
||
return self::formatMinorInt((int) $minor);
|
||
}
|
||
|
||
private static function formatMinorInt(int $minorUnits): string
|
||
{
|
||
$decimals = LotterySettings::currencyDisplayDecimals();
|
||
$decSep = LotterySettings::currencyDecimalSeparator();
|
||
$thousandsSep = LotterySettings::currencyThousandsSeparator();
|
||
|
||
$divisor = (int) max(1, 10 ** $decimals);
|
||
$negative = $minorUnits < 0;
|
||
$abs = abs($minorUnits);
|
||
|
||
$integerPart = intdiv($abs, $divisor);
|
||
$fractionRaw = $abs % $divisor;
|
||
$fractionPadded = str_pad((string) $fractionRaw, $decimals, '0', STR_PAD_LEFT);
|
||
|
||
$integerPartFormatted = number_format((float) $integerPart, 0, $decSep, $thousandsSep);
|
||
|
||
if ($decimals === 0) {
|
||
return ($negative ? '-' : '').$integerPartFormatted;
|
||
}
|
||
|
||
return ($negative ? '-' : '').$integerPartFormatted.$decSep.$fractionPadded;
|
||
}
|
||
}
|