防止MATLAB舍入数字并设置小数精度

时间:2014-11-14 15:04:55

标签: matlab casting rounding number-formatting

我尝试显示从串行接收的值,但Matlab不接受十进制数字结果。 我想从设备接收A = 0.123,将值乘以1000,然后通过串口发送到matlab。

matlab脚本接收123但是当为了得到原始值而划分该数字时,matlab显示为0.

consRollKpTemp = typecast([uint8(mess(typei + 1)), uint8(mess(typei + 2)),uint8(mess(typei + 3)), uint8(mess(typei + 4))], 'int32');
disp(consRollKpTemp);
consRollKp = consRollKpTemp/1000;
disp(consRollKp);

返回

consRollKpTemp:
         123    
consRollKp:
           0

我认为问题是typecast(X,type)函数

  

将X中的数值转换为由type。

指定的数据类型

我改为:

consRollKpTemp = typecast([uint8(mess(typei + 1)), uint8(mess(typei + 2)),uint8(mess(typei + 3)), uint8(mess(typei + 4))], 'single');

但没有改变。我已经在this问题和here中尝试了这些建议,但他们并没有尝试过这些建议。工作

1 个答案:

答案 0 :(得分:3)

问题是你使用int32作为类型,即你只有整数,0.23正确舍入为0.尝试在变量分割前将变量consRollKp强制转换为double它是1000:

consRollKp = double(consRollKpTemp) / 1000;

澄清:将typecastsingle一起使用将无效。 Typecast转换数据类型,无需更改基础数据。由于single是一个浮点数,uint8int32是整数类型,因此typecast之间的typecast不会产生预期的结果。

尝试int32uint32(或可能是dobule()),然后在第二步中使用single()或{{1}}将此变量转换为浮点数类型。最后你应该能够除以1000并得到正确的结果。