- {formatBillion(data.cards[3]?.amount || 0)}
+ {formatKoreanAmount(data.cards[3]?.amount || 0)}
{data.cards[3]?.changeRate && (
- {formatBillion(data.cards[0]?.amount || 0)}
+ {formatKoreanAmount(data.cards[0]?.amount || 0)}
{data.cards[0]?.previousLabel && (
@@ -449,7 +438,7 @@ export function EnhancedMonthlyExpenseSection({ data, onCardClick }: EnhancedMon
- {formatBillion(data.cards[1]?.amount || 0)}
+ {formatKoreanAmount(data.cards[1]?.amount || 0)}
{data.cards[1]?.previousLabel && (
@@ -474,7 +463,7 @@ export function EnhancedMonthlyExpenseSection({ data, onCardClick }: EnhancedMon
- {formatBillion(data.cards[2]?.amount || 0)}
+ {formatKoreanAmount(data.cards[2]?.amount || 0)}
{data.cards[2]?.previousLabel && (
@@ -499,7 +488,7 @@ export function EnhancedMonthlyExpenseSection({ data, onCardClick }: EnhancedMon
- {formatBillion(totalAmount)}
+ {formatKoreanAmount(totalAmount)}
diff --git a/src/utils/formatAmount.ts b/src/utils/formatAmount.ts
index 3f1f4950..01534872 100644
--- a/src/utils/formatAmount.ts
+++ b/src/utils/formatAmount.ts
@@ -40,4 +40,39 @@ export function formatAmountManwon(amount: number): string {
}
const manwon = Math.round(amount / 10000);
return `${manwon.toLocaleString("ko-KR")}만원`;
+}
+
+/**
+ * 한국식 금액 축약 포맷
+ *
+ * - 1만 미만: 원 단위 (예: "5,000원")
+ * - 1만 ~ 1억 미만: 만 단위 (예: "5,320만")
+ * - 1억 이상: 억 + 만 단위 (예: "1억 5,000만", "12억 3,453만")
+ * - 만원 나머지가 0이면 "10억"
+ */
+export function formatKoreanAmount(amount: number): string {
+ if (amount == null || isNaN(amount)) return "0원";
+
+ const absAmount = Math.abs(amount);
+ const sign = amount < 0 ? "-" : "";
+
+ if (absAmount < 10000) {
+ // 만원 미만: 원 단위
+ return sign + absAmount.toLocaleString("ko-KR") + "원";
+ }
+
+ if (absAmount < 100000000) {
+ // 만원 ~ 억 미만: 만 단위
+ const manwon = Math.round(absAmount / 10000);
+ return sign + manwon.toLocaleString("ko-KR") + "만";
+ }
+
+ // 억 이상: 억 + 만 단위
+ const eok = Math.floor(absAmount / 100000000);
+ const remainder = Math.round((absAmount % 100000000) / 10000);
+
+ if (remainder === 0) {
+ return sign + eok.toLocaleString("ko-KR") + "억";
+ }
+ return sign + eok.toLocaleString("ko-KR") + "억 " + remainder.toLocaleString("ko-KR") + "만";
}
\ No newline at end of file