我试图在Matlab中找到一种截断向量值的方法,只保留它们的前N个数字(我不想将它舍入,只是为了它。)。我写了一些东西,它转换字符串中的值,剪切那些并返回被截断的数字,但它太慢了。
更聪明的解决方案?
提前多多感谢!
答案 0 :(得分:3)
由于你严格说你不想对数字进行舍入,这里有一个floor
函数的可能解决方案,我只是删除指定的十进制数N
之后的数字我要保留:
function trunc = truncate(x,N)
trunc = floor(x*10^N)/10^N;
end
这是一个示例运行:
>> b=rand(1,2)
b =
0.957166948242946 0.485375648722841
>> truncate(b,3)
ans =
0.957000000000000 0.485000000000000
请注意,如果您考虑的数字大于1,则必须稍微修改上述函数:
function trunc = truncate(x,N)
%For numbers equal or greater than 1, getting N first digits
trunc=x;
idx = x>=1;
trunc(idx) = floor(x(idx)/10^N);
%For decimals, keeping N first digits after comma
trunc(~idx) = floor(x(~idx)*10^N)/10^N;
end
truncate
函数的另一次运行:
>> b=[123 rand(1,2)]
b =
1.0e+02 *
1.230000000000000 0.004217612826263 0.009157355251891
>> truncate(b,2)
ans =
1.000000000000000 0.420000000000000 0.910000000000000
重要的是要注意,没有进行任何检查来验证函数的输入实际上是否有大于N的数字,我认为这是真的。
答案 1 :(得分:0)
您可以使用与此示例相同的逻辑:
X =-1.665584378238097
Y = round(X / 0.01) * 0.01
Y =
-1.670000000000000
并将其应用于矢量/矩阵。