yeg
4 天以前 f4d7007b89cf565746af4623623a294b82666ff1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { formatTestDuration, parseTestDuration } from './testDataDuration.ts'
 
const milliFields = new Set([
  'current', 'capacity', 'energy',
  'chargeCapacity', 'dischargeCapacity', 'chargeEnergy', 'dischargeEnergy',
])
 
/** 将内部 A/Ah/Wh 转为甲方展示单位,其他字段保留原值。 */
export function toTestDisplayValue(field: string, value: number): number {
  return milliFields.has(field) ? Number((value * 1000).toPrecision(15)) : value
}
 
/** 将编辑输入转回 API 单位;空值及非法输入交由原有校验处理。 */
export function toTestApiValue(field: string, value: string): string {
  if (field === 'stepDuration') {
    const seconds = parseTestDuration(value)
    return seconds == null ? '-' : String(seconds)
  }
  if (!milliFields.has(field) || !value.trim() || !Number.isFinite(Number(value))) return value
  return String(Number((Number(value) / 1000).toPrecision(15)))
}
 
/** 格式化 API 测量值,先换算再舍入,保留零值与缺失的区别。 */
export function formatTestDisplayValue(field: string, value: unknown): string {
  if (field === 'stepDuration' || field === 'relativeTimeSeconds') return formatTestDuration(value)
  if (value === null || value === undefined || String(value).trim() === '') return '-'
  const number = Number(value)
  return Number.isFinite(number) ? toTestDisplayValue(field, number).toFixed(4) : '-'
}