如何在matlab变量中只存储最多4个小数位?

时间:2011-12-22 06:39:04

标签: matlab

我希望matlab中的变量能够存储(不要与显示混淆)最多4位小数。 是否有内置命令? 我尝试了以下内容 - 但这会出错:

a = [5.21365458 5.236985475 1.236598547 9.3265874];

k=1;
for i=1:length(a)
ast(k)=sprintf('%5.4f',a(i));
anum(k)=str2num(ast(k));
k=k+1;
end

错误是:???订阅的分配维度不匹配。

4 个答案:

答案 0 :(得分:5)

您应该将数字四舍五入到小数点后四位。这在工作区中很容易做到:

>> x = rand(1,4)
x =
   0.053378064308120   0.051670599653141   0.924623792776560   0.585692341974519
>> x = round(x*1e4) / 1e4
x =
   0.053400000000000   0.051700000000000   0.924600000000000   0.585700000000000

或者您可以编写一个函数roundToDP(x,numberOfDecimalPlaces)来为您完成:

function x = roundToDP(x,n)
% "Round the matrix x to n decimal places"
x = round(x * 10^n) / 10^n;

现在您可以在工作区中使用该功能:

>> x = rand(1,4)
x =
   0.810201981892601   0.165116049955136   0.457688639337064   0.985975706057179
>> roundToDP(x,4)
ans =
   0.810200000000000   0.165100000000000   0.457700000000000   0.986000000000000

答案 1 :(得分:0)

您可以将数字乘以10000并将其存储为整数,然后除以10000,然后再显示

答案 2 :(得分:0)

你的问题与anum成为char数组的事实有关。改为使用单元格数组:

  

a = [5.21365458 5.236985475 1.236598547 9.3265874];

     

anum = cell(size(a));
  对于i = 1:数字(a)
   anum {i} = str2num(sprintf('%5.4f',a(i)));
  结束

另外,如您所见,不需要k变量

答案 3 :(得分:0)

您可以使用Matlab reference to fixed point object

中提到的matlab的定点对象