/* @tier easy @module st @transform settlement-util */ /* * st_cu_0001.c - 정산수수료 공통 유틸리티 (plain C) [tier=easy] */ #include "st_cu_0001.h" #include /* 슬랩(구간별 고정액) 수수료 테이블 조회 */ static long st_cu_0001_slab(long a) { static const long lim[4] = {10000L, 100000L, 1000000L, 10000000L}; static const long fixed[5] = {100L, 500L, 2000L, 8000L, 30000L}; int i; for (i = 0; i < 4; i++) if (a < lim[i]) return fixed[i]; return fixed[4]; } /* 수수료: 슬랩 고정액 + 미세 요율 가산 */ long st_cu_0001_fee(long amount, int rate_bp) { long f; if (amount <= 0 || rate_bp < 0) return 0; f = st_cu_0001_slab(amount); f += amount * (long)rate_bp / 100000L; return f; } /* 가장 가까운 배수(반올림, 동점은 올림) */ long st_cu_0001_round_unit(long amount, long unit) { long q, r; if (unit <= 0) return amount; q = amount / unit; r = amount % unit; if (r * 2 >= unit) q++; return q * unit; } /* 분류: 통과한 임계 개수(0~5) */ int st_cu_0001_classify(long amount) { static const long g[5] = {1000L, 10000L, 100000L, 1000000L, 10000000L}; int i, c = 0; for (i = 0; i < 5; i++) if (amount >= g[i]) c++; return c; }