问题
在记录详情页(DetailSection)中,数值(number)类型字段显示出大量末尾的 0,例如:
- 定额工时:
16.00000000
- 版本号:
1.0000000000
- 标准配员合计:
2.0000000000
- 顺序号:
10.0000000000
期望显示的应是 16 / 1 / 2 / 10。
原因
数值字段的小数位(precision/scale)通常来自后端 DB 列定义(如 decimal(18,10)),表示的是存储精度上限,而不是必须展示的固定小数位数。
但 packages/fields/src/index.tsx 中的 NumberCellRenderer 把它当成固定小数位来渲染:
const precision = numField.precision ?? 0;
new Intl.NumberFormat('en-US', {
minimumFractionDigits: precision, // ← 强制补零
maximumFractionDigits: precision,
}).format(num)
minimumFractionDigits 被设成了 precision,于是一个 decimal(18,10) 列里的整数 1 就被补成了 1.0000000000。
方案
把小数位当作**最大值(上限)**而非固定值:minimumFractionDigits 固定为 0,末尾多余的 0 会被自动裁掉,maximumFractionDigits 用 precision ?? scale 作为上限。这样:
1(decimal(18,10)) → 1
16.5 → 16.5
3.14159(precision 2) → 3.14
同时补齐 DetailSection 等处只透传 precision、未透传 scale 的问题。
问题
在记录详情页(DetailSection)中,数值(number)类型字段显示出大量末尾的 0,例如:
16.000000001.00000000002.000000000010.0000000000期望显示的应是
16/1/2/10。原因
数值字段的小数位(
precision/scale)通常来自后端 DB 列定义(如decimal(18,10)),表示的是存储精度上限,而不是必须展示的固定小数位数。但
packages/fields/src/index.tsx中的NumberCellRenderer把它当成固定小数位来渲染:minimumFractionDigits被设成了precision,于是一个decimal(18,10)列里的整数1就被补成了1.0000000000。方案
把小数位当作**最大值(上限)**而非固定值:
minimumFractionDigits固定为 0,末尾多余的 0 会被自动裁掉,maximumFractionDigits用precision ?? scale作为上限。这样:1(decimal(18,10)) →116.5→16.53.14159(precision 2) →3.14同时补齐
DetailSection等处只透传precision、未透传scale的问题。