market.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // 시장 데이터 표시용 순수 유틸 (서버·클라이언트 공용 — 'use client'/'use server' 미선언)
  2. // 소수 포함 숫자 (지수·환율·금리 등) — 천 단위 구분 + 소수 자릿수 지정. null 은 —
  3. export function formatDecimal(value: number|null|undefined, fractionDigits = 2): string {
  4. if (value === null || value === undefined) {
  5. return '—';
  6. }
  7. return value.toLocaleString('ko-KR', {
  8. minimumFractionDigits: fractionDigits,
  9. maximumFractionDigits: fractionDigits
  10. });
  11. }
  12. // bp(만분율) → % 문자열 (부호 없이 절대값, 색·부호는 마크업에서 병행). 예: 1234 → "12.34%"
  13. export function formatBpRate(bp: number|null|undefined): string {
  14. if (bp === null || bp === undefined) {
  15. return '—';
  16. }
  17. return `${(Math.abs(bp) / 100).toFixed(2)}%`;
  18. }
  19. // 금리 % (미고시 null → —). 예: 3.5 → "3.50%"
  20. export function formatRatePercent(value: number|null|undefined, fractionDigits = 2): string {
  21. if (value === null || value === undefined) {
  22. return '—';
  23. }
  24. return `${value.toFixed(fractionDigits)}%`;
  25. }
  26. // 최신 기준일 라벨 (tradeDate null 이면 대체 문구)
  27. export function tradeDateLabel(date: string|null|undefined): string {
  28. return date ? `${date} 기준` : '데이터 준비 중';
  29. }
  30. // 공시 접수번호 → DART 원문 링크
  31. export function dartViewerUrl(rceptNo: string): string {
  32. return `https://dart.fss.or.kr/dsaf001/main.do?rcpNo=${encodeURIComponent(rceptNo)}`;
  33. }