Phase 1: initial codes
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
def fmt_currency(value: float, decimals: int = 2) -> str:
|
||||
if value is None:
|
||||
return "—"
|
||||
sign = "-" if value < 0 else ""
|
||||
return f"{sign}${abs(value):,.{decimals}f}"
|
||||
|
||||
|
||||
def fmt_percent(value: float, decimals: int = 2, plus: bool = True) -> str:
|
||||
if value is None:
|
||||
return "—"
|
||||
sign = "+" if value > 0 and plus else ""
|
||||
return f"{sign}{value:.{decimals}f}%"
|
||||
|
||||
|
||||
def fmt_large_number(value: float) -> str:
|
||||
if value is None:
|
||||
return "—"
|
||||
abs_val = abs(value)
|
||||
sign = "-" if value < 0 else ""
|
||||
if abs_val >= 1_000_000_000_000:
|
||||
return f"{sign}{abs_val / 1_000_000_000_000:.2f}T"
|
||||
if abs_val >= 1_000_000_000:
|
||||
return f"{sign}{abs_val / 1_000_000_000:.2f}B"
|
||||
if abs_val >= 1_000_000:
|
||||
return f"{sign}{abs_val / 1_000_000:.2f}M"
|
||||
if abs_val >= 1_000:
|
||||
return f"{sign}{abs_val / 1_000:.1f}K"
|
||||
return f"{sign}{abs_val:.2f}"
|
||||
|
||||
|
||||
def fmt_volume(value: int) -> str:
|
||||
return fmt_large_number(float(value)) if value else "—"
|
||||
|
||||
|
||||
def pnl_color(value: float) -> str:
|
||||
if value > 0:
|
||||
return "#a6e3a1"
|
||||
if value < 0:
|
||||
return "#f38ba8"
|
||||
return "#cdd6f4"
|
||||
Reference in New Issue
Block a user