from __future__ import annotations from datetime import datetime, timezone from decimal import Decimal, ROUND_HALF_UP from typing import Any CREDIT_QUANT = Decimal("0.01") def to_credit_decimal(value: Any) -> Decimal: try: return Decimal(str(value or 0)).quantize(CREDIT_QUANT, rounding=ROUND_HALF_UP) except Exception as exc: raise ValueError(f"无效积分数值: {value!r}") from exc def to_float(value: Decimal | int | float | None) -> float: return float(to_credit_decimal(value)) def utc_now() -> datetime: return datetime.now(timezone.utc) def ensure_aware(value: datetime) -> datetime: if value.tzinfo is None: return value.replace(tzinfo=timezone.utc) return value