전략편집기 수정

This commit is contained in:
Macbook
2026-05-25 17:56:25 +09:00
parent aac6454724
commit 02d14e4b2b
39 changed files with 1974 additions and 288 deletions
+33
View File
@@ -0,0 +1,33 @@
/**
* API·JSON·WebSocket에서 문자열로 올 수 있는 숫자를 안전하게 처리
*/
export function coerceFiniteNumber(v: unknown): number | null {
if (v == null || v === '') return null;
if (typeof v === 'number') return Number.isFinite(v) ? v : null;
if (typeof v === 'string') {
const trimmed = v.trim().replace(/,/g, '');
if (!trimmed) return null;
const n = Number(trimmed);
return Number.isFinite(n) ? n : null;
}
const n = Number(v);
return Number.isFinite(n) ? n : null;
}
/** toFixed 크래시 방지 — 숫자가 아니면 '—' */
export function safeToFixed(v: unknown, digits = 2, fallback = '—'): string {
const n = coerceFiniteNumber(v);
if (n == null) return fallback;
try {
return n.toFixed(digits);
} catch {
return fallback;
}
}
export function safePercentFromRate(v: unknown, digits = 2): string {
const n = coerceFiniteNumber(v);
if (n == null) return '—';
const sign = n >= 0 ? '+' : '';
return `${sign}${safeToFixed(n * 100, digits, '0.00')}%`;
}