我希望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
错误是:???订阅的分配维度不匹配。
答案 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)