Files
Aislo/M02_MasterTemplete/DataFlow/M02_DF_Round.ts
T

34 lines
1.3 KiB
TypeScript

/* =============================================================================
* M02_DF_Round.ts
* 끝수 — 출력 칸 수식을 ROUND 계열로 감쌈 · 감싼 것을 읽음 · DOM 없음
* 소수자리 제안은 단위 표준(M02_DF_UnitPick.suggestPlaces) · 주 ① 반올림 · ② 항목 값 우선
* ========================================================================== */
export type RoundMode = "반올림" | "올림" | "버림";
export const ROUND_FN: Record<RoundMode, string> = {
반올림: "ROUND",
올림: "ROUNDUP",
버림: "ROUNDDOWN",
};
export interface RoundSpec {
places: number;
mode: RoundMode;
}
const WRAPPED = /^(ROUND|ROUNDUP|ROUNDDOWN)\((.*),\s*(-?\d+)\s*\)$/s;
/** 칸 수식(앞 = 뺀 글) → 끝수 · 안 감싸였으면 null */
export function parseRound(formula: string): { spec: RoundSpec; inner: string } | null {
const m = WRAPPED.exec(formula.trim());
if (!m) return null;
const mode = (Object.keys(ROUND_FN) as RoundMode[]).find((k) => ROUND_FN[k] === m[1]);
return mode ? { spec: { places: Number(m[3]), mode }, inner: m[2] } : null;
}
/** 안쪽 글에 끝수를 씌움 — spec 이 null 이면 벗김 */
export function wrapRound(inner: string, spec: RoundSpec | null): string {
return spec ? `${ROUND_FN[spec.mode]}(${inner}, ${spec.places})` : inner;
}