防止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');
答
的问题是,你正在使用int32
类型,即你只有整数和0.23正确四舍五入到0试图通过1000除以之前投下变量consRollKp
到double
:
consRollKp = double(consRollKpTemp)/1000;
澄清:使用typecast
与single
不起作用。类型转换转换数据类型而不是更改基础数据。由于single
是一个浮点数,而uint8
和int32
是整数类型,它们之间的typecast
不会导致期望的结果。
尝试typecast
到int32
(或可能uint32
)和在第二步骤中使用dobule()
或single()
此变量转换为浮点型。最后,你应该能够除以1000,并得到正确的结果。