2014-11-14 138 views
0

我想顯示從串行接收的值,但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的建議,但他們沒有工作。

回答

3

的問題是,你正在使用int32類型,即你只有整數和0.23正確四捨五入到0試圖通過1000除以之前投下變量consRollKpdouble

consRollKp = double(consRollKpTemp)/1000; 

澄清:使用typecastsingle不起作用。類型轉換轉換數據類型而不是更改基礎數據。由於single是一個浮點數,而uint8int32是整數類型,它們之間的typecast不會導致期望的結果。

嘗試typecastint32(或可能uint32)和在第二步驟中使用dobule()single()此變量轉換爲浮點型。最後,你應該能夠除以1000,並得到正確的結果。