Modbus协议中浮点数(单精度)使用的是IEEE754标准浮点数(32位)的表示方法:

IEEE754浮点数二进制格式示意图
转换为10进制的公式:
SGL = (-1)^SIGN * 1.MANTISSA * 2^(EXPONENT-127)
转换举例:
将40800000转换为10进制数,方法如下:

Modbus浮点数转换示例
JAVA代码:
- public static float toFloat(short s1, short s2) {//将输入数值short转化为无符号
- //
- int us1 = s1, us2 = s2;
- if (s1 < 0) {
- us1 += 65536;
- }
- if (s2 < 0) {
- us2 += 65536;
- }
- // sign: 符号位, exponent: 阶码, mantissa:尾数
- int sign, exponent;
- float mantissa;//计算符号位
- sign = us1 / 32768;//去掉符号位
- int emCode = us1 % 32768;//计算阶码
- exponent = emCode / 128;//计算尾数
- mantissa = (float) (emCode % 128 * 65536 + us2) / 8388608;//代入公式
- //fValue = (-1) ^ S x 2 ^ (E - 127) x (1 + M)
- return (float) Math.pow(-1, sign) * (float) Math.pow(2, exponent - 127) * (1 + mantissa);
- }