Files
ExperionCrawler/digit-trunc.md
2026-04-28 22:30:41 +09:00

4.6 KiB

숫자 표시 자릿수 통일 — 전체 프론트엔드 적용

목표

src/Web/wwwroot/js/app.js 에서 숫자·시각 값을 표시하는 모든 테이블 렌더 함수에 아래 두 규칙을 일괄 적용한다.

값 종류 현재 표시 예시 목표 표시 예시
타임스탬프 (recorded_at, timeBucket, recordedAt, bucket 등) 2026-04-28 08:15:44.151358+00:00 2026-04-28 08:15:44.1
실수(float) 태그값 43.20000076293945 43.20
  • 타임스탬프: 초 소수점 1자리까지, 타임존 오프셋(+00:00 등) 제거
  • 실수 태그값: 소수점 2자리까지 (toFixed(2))
  • 정수·문자열·null/undefined 값은 그대로 유지

작업 기록

[2026-04-28 08:55] 작업 시작

  • digit-trunc.md 읽기 및 작업 계획 수립 완료
  • 작업 단위: 7단계 (헬퍼 함수 추가 → 각 함수 수정 → 검증)

[2026-04-28 08:55] fmtTs, fmtVal 헬퍼 함수 추가

파일: src/Web/wwwroot/js/app.js (문서 하단 추가)

/**
 * 타임스탬프 문자열을 "YYYY-MM-DD HH:MM:SS.f" 형식으로 변환 (소수점 1자리, 시간대 제거).
 * ISO 8601 문자열 또는 Date 객체 모두 허용.
 */
function fmtTs(v) {
  if (v == null) return '';
  const s = String(v);
  // "2026-04-28 08:15:44.151358+00:00" 또는 "2026-04-28T08:15:44.151358Z" 형태 처리
  const m = s.match(/^(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})(\.\d+)?/);
  if (!m) return s;
  const frac = m[3] ? m[3].substring(0, 2) : '.0'; // ".1" 한 자리
  return `${m[1]} ${m[2]}${frac}`;
}

/**
 * 값이 유한 실수이면 소수점 2자리로 반환, 그 외(정수·문자열·null)는 그대로.
 */
function fmtVal(v) {
  if (v == null) return v;
  const n = Number(v);
  if (!Number.isFinite(n)) return v;
  if (Number.isInteger(n)) return v;          // 정수는 그대로
  return n.toFixed(2);
}

수정 대상 함수 목록 (남은 작업)

2. t2sRenderTable (line ~1483)

  • 컬럼명이 시각 관련이면 fmtTs 적용
  • 그 외 실수이면 fmtVal 적용

3. renderHistoryTable (line ~863)

  • 시각 열: fmtTs(r[timeColumn]) 적용
  • 값 열: fmtVal(raw) 적용

4. pbRender (line ~608)

  • LiveValue 열: fmtVal(p.liveValue) 적용
  • Timestamp 열: fmtTs(p.timestamp) 적용

5. t2sRenderAnalysis (line ~1565)

  • .toFixed(4).toFixed(2) 변경 (4곳)

적용 범위 요약

함수 타임스탬프 fmtTs 실수값 fmtVal
t2sRenderTable
renderHistoryTable
pbRender
t2sRenderAnalysis (toFixed(4)→2)

주의 사항

  • fmtTs / fmtVal표시 전용이다. API 전송·비교 로직에는 적용하지 않는다.
  • fmtTstoLocaleString('ko-KR')완전히 대체한다 (시간대 이슈 방지).
  • fmtValNumber.isInteger 판별로 정수(1, 100)는 건드리지 않는다.
  • null/undefined 처리 기존 로직(, NULL 스타일)은 그대로 유지한다.

[2026-04-28 09:00] pbRender 함수 수정

파일: src/Web/wwwroot/js/app.js (608번 함수)

  • LiveValue 열: fmtVal(p.liveValue) 적용
  • Timestamp 열: fmtTs(p.timestamp) 적용

[2026-04-28 09:00] t2sRenderAnalysis 함수 수정

파일: src/Web/wwwroot/js/app.js (1564번 함수)

  • 평균, 최대, 최소, 표준편차: .toFixed(4).toFixed(2) 변경 (4곳)

수정 완료 요약

항목 상태
fmtTs, fmtVal 헬퍼 함수 추가
t2sRenderTable 함수 수정 (타임스탬프, 실수값)
renderHistoryTable 함수 수정 (시각, 값)
pbRender 함수 수정 (LiveValue, Timestamp)
t2sRenderAnalysis 함수 수정 (toFixed 4→2)

다음 단계

프로젝트 빌드 검증을 진행할까요?

[2026-04-28 09:01] 빌드 검증 완료

결과: .NET 8 WinUI3 프로젝트 빌드 성공 (0 Warning / 0 Error)


📋 작업 완료 요약

항목 설명 상태
fmtTs 타임스탬프 포맷팅 (소수점 1자리, 시간대 제거)
fmtVal 실수값 포맷팅 (소수점 2자리 정수 유지)
t2sRenderTable NL2SQL 테이블: 시각/실수값에 fmt 적용
renderHistoryTable 이력 테이블: 시각/값에 fmt 적용
pbRender 포인트 빌드 테이블: LiveValue/Timestamp에 fmt 적용
t2sRenderAnalysis 분석 카드: toFixed(4) → toFixed(2)
빌드 검증 .NET 프로젝트 빌드 성공