56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import React from 'react'
|
|
|
|
type CommonProps = {
|
|
value: string | number | '';
|
|
format: string;
|
|
}
|
|
|
|
export default function TransValueFormat({value='', format=''}: CommonProps) {
|
|
return (
|
|
format === 'yyyyMMdd' ?
|
|
<>{value.toString().substring(0,4)+'-'+value.toString().substring(4,6)+'-'+value.toString().substring(6,8)}</>
|
|
: format === 'number' ?
|
|
<>{String(value ?? '').includes('.')
|
|
? String(value).split('.').map((part, index) =>
|
|
index === 0 ? part.replace(/\B(?=(\d{3})+(?!\d))/g, ",") : part
|
|
).join('.')
|
|
: String(value ?? '').replace(/\B(?=(\d{3})+(?!\d))/g, ",")}</>
|
|
: format === 'float1' ?
|
|
<>{String(value ?? '').includes('.')
|
|
? String(value).split('.').map((part, index) =>
|
|
index === 0 ? part.replace(/\B(?=(\d{3})+(?!\d))/g, ",") : part
|
|
).join('.')
|
|
: String(value ?? '').replace(/\B(?=(\d{3})+(?!\d))/g, ",")}</>
|
|
: <>{value}</>
|
|
)
|
|
}
|
|
|
|
/**
|
|
* 천,만 등의 단위 변경 && 반올림 및 소숫점 자리수 지정
|
|
* @param value
|
|
* @param unitSize 단위 변경 1000 인 경우, 100,000 -> 100 으로 변경
|
|
* @param decimalPlaces 어느 자리수에서 반올림할지 지정 1이면 소수 두번째 자리에서 반올림
|
|
* @returns
|
|
*/
|
|
export const formatUsage = (
|
|
value: string | number,
|
|
unitSize: number = 1,
|
|
decimalPlaces: number = 0
|
|
) => {
|
|
if (value === null || value === undefined || value === "") return "";
|
|
const numeric =
|
|
typeof value === "number" ? value : Number(String(value).replaceAll(",", ""));
|
|
|
|
if (Number.isNaN(numeric)) {
|
|
return String(value);
|
|
}
|
|
|
|
const scaledValue = numeric / unitSize;
|
|
const roundedValue =
|
|
Math.round(scaledValue * 10 ** decimalPlaces) / 10 ** decimalPlaces;
|
|
|
|
return roundedValue.toLocaleString("ko-KR", {
|
|
minimumFractionDigits: decimalPlaces,
|
|
maximumFractionDigits: decimalPlaces,
|
|
});
|
|
}; |