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

问题描述:

我想显示从串行接收的值,但Matlab不接受小数点结果。 我想从设备接收A = 0.123,数值乘以1000,然后通过串行发送到matlab。防止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中的数值转换为按类型指定的数据类型。

,我把它改成:

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

但什么都没有改变。我已经尝试了this问题和here的建议,但他们没有工作。

的问题是,你正在使用int32类型,即你只有整数和0.23正确四舍五入到0试图通过1000除以之前投下变量consRollKpdouble

consRollKp = double(consRollKpTemp)/1000; 

澄清:使用typecastsingle不起作用。类型转换转换数据类型而不是更改基础数据。由于single是一个浮点数,而uint8int32是整数类型,它们之间的typecast不会导致期望的结果。

尝试typecastint32(或可能uint32)和在第二步骤中使用dobule()single()此变量转换为浮点型。最后,你应该能够除以1000,并得到正确的结果。