问题(用户实测 MF4-Record.MF4 / m_MOT_Current_DCom[0]): - 最小数据间隔真实值 0.003696631s,却被显示成 3ms 700us(us 部分被向上截取); - 对应频率真实值 270.516586589Hz,却被显示成 270.27Hz; - 最大数据间隔 0.016182614s 显示成 16ms 200us、频率显示成 61.7284Hz,同样不准。 根因(两个,同一个坑): 1. RoundIntervalForDisplay() 把间隔先舍入到 3 位有效数字(0.003696631 -> 0.0037), 次级单位因此变成 700us,真实尾数被抹掉; 2. 频率用舍入后的 3.70ms 换算得 270.27Hz,而输入框用原值得 270.517Hz,两处不一致。 修法(一律使用真实值,舍入只发生在输出文本的最后一步): - Utf8Util 新增 FormatDecimalFixed(value, decimals=3):固定小数位、保留尾随 0、 绝不出现科学计数法; - Utf8Util 新增 FormatSubUnit(value, maxDecimals):带小数才补到 3 位,整数不加小数点 (5.06s -> 5s 60ms,而不是 5s 60.000ms); - FormatDurationCompound 的两处次级单位(s+ms、ms/us/ns)改用它; - FormatFrequency 改为 FormatDecimalFixed(scaled, 3);若保留 3 位后变成 0.000 (超低频,如 1/3662s ≈ 0.27mHz)则退回 FormatDecimal,避免有意义的值显示成 0; - PlotViewInternal.hpp 删除 RoundIntervalForDisplay,FormatIntervalText 直接用真实值; - PlotViewPaint.cpp 的统计行尾缀与频率输入框都用真实 interval 换算。 修复后的显示: min interval 0.003696631s -> 3ms 696.631us frequency 1/0.003696631 -> 270.517 Hz max interval 0.016182614s -> 16ms 182.614us frequency 1/0.016182614 -> 61.795 Hz 同时撤销了此前两次仅修改 agent_mem.md 的提交(47b1213 / caa035a,内容为乱码且无有效信息), 并按正确编码重新整理本轮记忆章节。 面板仍为四行(最大间隔 / 最小间隔 / 重采样间隔 / 重采样频率),未改动任何 UI 布局。 make release 零 warning。
35 lines
2.0 KiB
Plaintext
35 lines
2.0 KiB
Plaintext
fix(resample): 重采样间隔/频率按真实值显示(次级单位与频率保留三位小数)
|
||
|
||
问题(用户实测 MF4-Record.MF4 / m_MOT_Current_DCom[0]):
|
||
- 最小数据间隔真实值 0.003696631s,却被显示成 3ms 700us(us 部分被向上截取);
|
||
- 对应频率真实值 270.516586589Hz,却被显示成 270.27Hz;
|
||
- 最大数据间隔 0.016182614s 显示成 16ms 200us、频率显示成 61.7284Hz,同样不准。
|
||
|
||
根因(两个,同一个坑):
|
||
1. RoundIntervalForDisplay() 把间隔先舍入到 3 位有效数字(0.003696631 -> 0.0037),
|
||
次级单位因此变成 700us,真实尾数被抹掉;
|
||
2. 频率用舍入后的 3.70ms 换算得 270.27Hz,而输入框用原值得 270.517Hz,两处不一致。
|
||
|
||
修法(一律使用真实值,舍入只发生在输出文本的最后一步):
|
||
- Utf8Util 新增 FormatDecimalFixed(value, decimals=3):固定小数位、保留尾随 0、
|
||
绝不出现科学计数法;
|
||
- Utf8Util 新增 FormatSubUnit(value, maxDecimals):带小数才补到 3 位,整数不加小数点
|
||
(5.06s -> 5s 60ms,而不是 5s 60.000ms);
|
||
- FormatDurationCompound 的两处次级单位(s+ms、ms/us/ns)改用它;
|
||
- FormatFrequency 改为 FormatDecimalFixed(scaled, 3);若保留 3 位后变成 0.000
|
||
(超低频,如 1/3662s ≈ 0.27mHz)则退回 FormatDecimal,避免有意义的值显示成 0;
|
||
- PlotViewInternal.hpp 删除 RoundIntervalForDisplay,FormatIntervalText 直接用真实值;
|
||
- PlotViewPaint.cpp 的统计行尾缀与频率输入框都用真实 interval 换算。
|
||
|
||
修复后的显示:
|
||
min interval 0.003696631s -> 3ms 696.631us
|
||
frequency 1/0.003696631 -> 270.517 Hz
|
||
max interval 0.016182614s -> 16ms 182.614us
|
||
frequency 1/0.016182614 -> 61.795 Hz
|
||
|
||
同时撤销了此前两次仅修改 agent_mem.md 的提交(47b1213 / caa035a,内容为乱码且无有效信息),
|
||
并按正确编码重新整理本轮记忆章节。
|
||
|
||
面板仍为四行(最大间隔 / 最小间隔 / 重采样间隔 / 重采样频率),未改动任何 UI 布局。
|
||
make release 零 warning。
|