给定一个变量 x = 12.3442
我想知道变量的小数位数。在这种情况下,结果将是 4。如何在不反复试验的情况下做到这一点?
这是一个紧凑的方式:
y = x.*10.^(1:20)
find(y==round(y),1)
假设这x
是您的数字,而 20 是最大小数位数。
正如评论中提到的,“小数位数”在大多数情况下没有意义,但我认为这可能是你正在寻找的:
>> num = 1.23400;
>> temp = regexp(num2str(num),'\.','split')
temp =
'1' '234'
>> length(temp{2})
ans =
3
对于一个数字a
,并且假设它的小数位数少于 28 位,这是紧凑而可靠的:
numDP = length(num2str(a, 28)) - strfind(num2str(a, 28),'.');
转换为字符串很好地利用了 Matlab 中的字符串比较函数,尽管它有点笨拙。
%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
适用于所有条件(如果是十进制):
temp = strsplit(num2str(num),'.');
result = length(temp{2});