新增独立 xiaobai-datahub 服务(SQLite WAL、Tushare 盘后发布、/v1 契约和管理后台),不改现站页面与数据链路。 Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: multica-agent <github@multica.ai>
24 lines
578 B
Python
24 lines
578 B
Python
from __future__ import annotations
|
|
|
|
import math
|
|
from typing import Any
|
|
|
|
|
|
def finite_number(value: Any, default: float | None = None) -> float | None:
|
|
"""Return a finite float, or default (None means JSON null)."""
|
|
if value is None or value == "":
|
|
return default
|
|
try:
|
|
number = float(value)
|
|
except (TypeError, ValueError):
|
|
return default
|
|
if not math.isfinite(number):
|
|
return default
|
|
return number
|
|
|
|
|
|
def round4(value: float | None) -> float | None:
|
|
if value is None:
|
|
return None
|
|
return round(float(value), 4)
|