在 MATLAB 中查找变量的小数位数

问题描述 投票:0回答:5

给定一个变量 x = 12.3442

我想知道变量的小数位数。在这种情况下,结果将是 4。如何在不反复试验的情况下做到这一点?

matlab
5个回答
6
投票

这是一个紧凑的方法:

y = x.*10.^(1:20)
find(y==round(y),1)

假设

x
是您的数字,20 是小数点后的最大位数。

但是,当 x<1.17. One slightly less compact solution for scalar x is:

时,这不适用于整数和小数点后两位
if (mod(x, 1) == 0)
    p = 0;
else
    y = x.*10.^(1:20);
    isround = y==round(y);
    p = find(isround,1);
    if ~all(isround(p:end)) && p==3
        p = 2;  %correct for small values with 2 d.p. (x<1.17)
    end
end

4
投票

正如评论中提到的,“小数位数”在大多数情况下没有意义,但我认为这可能就是您正在寻找的:

>> num = 1.23400;
>> temp = regexp(num2str(num),'\.','split')

temp = 

    '1'    '234'
>> length(temp{2})

ans =

    3

0
投票
%If number is less than zero, we need to work with absolute value
if(value < 0)
   num = abs(value);
else
   num = value;
end
d = 0; % no of places after decimal initialised to 0.
x = floor(num);
diff = num - x;
while(diff > 0)
     d = d + 1;
     num = num * 10;
     x = floor(num);
     diff = num - x;
 end

 %d is the required digits after decimal point    

0
投票

对于一个数字

a
,并且假设它的小数位少于 28 位,这是紧凑且可靠的:

numDP = length(num2str(a, 28)) - strfind(num2str(a, 28),'.');

转换为字符串很好地利用了Matlab中的字符串比较函数,尽管有点笨拙。


-1
投票

在所有条件下都有效(如果是十进制):

temp = strsplit(num2str(num),'.');
result = length(temp{2});
© www.soinside.com 2019 - 2024. All rights reserved.