You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Modbus-RTU电源配置工具中int转十六进制的固定0.01偏差问题

问题根因与修复方案

1. 浮点数转整数精度损失(导致0.01固定偏差的核心原因)

你传入GenerateInputCode的int参数由double类型设置值*100直接强制转换得到,由于浮点数的存储精度特性,类似2.55这类十进制值无法被double精确存储,计算2.55*100时实际得到的结果可能是254.9999999999999而非精确的255。C#中double强制转int会直接截断小数部分,最终得到254而非预期的255,对应电源端显示就会少0.01。

  • 修复方法:转换时添加四舍五入逻辑:
int voltageParam = (int)Math.Round(targetVoltage * 100);
int currentParam = (int)Math.Round(targetCurrent * 100);

2. 八进制字面量错误

你代码中referenceValuesFix数组的数值大量使用前导0开头(例如024、057),C#语法规定以0开头的整数字面量会被识别为八进制数,例如024实际对应十进制的20,而非你预期的24,部分数值如029甚至属于非法八进制(八进制数位范围为0-7),会直接导致编译错误。

  • 修复方法:删除数组中所有数值的前导0,直接写十进制数值即可。

补充说明

你代码中int转ushort、再拆分高低字节的逻辑完全正确,255转换后得到的确实是0x00 0xFF,和你举例的正确指令一致,字节转换环节没有问题。


内容的提问来源于stack exchange,提问作者brunoM94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:45:03