matlab:只保留前N位数字

时间:2015-06-10 13:08:35

标签: matlab digits

我试图在Matlab中找到一种截断向量值的方法,只保留它们的前N个数字(我不想将它舍入,只是为了它。)。我写了一些东西,它转换字符串中的值,剪切那些并返回被截断的数字,但它太慢了。

更聪明的解决方案?

提前多多感谢!

2 个答案:

答案 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

并将其应用于矢量/矩阵。