2015-10-06 75 views
1

我想计算一个整数的长度。MATLAB计算一个整数的长度

例如:

a = 1.1234; b = 33; c = 100; d = -222; 
e = lengthint([a,b,c,d]) 

预期输出:

e = 1 2 3 3 

我试图使用这样的:

e = max(ceil(log10(abs([a,b,c,d]))),1) 

但这是输出:

e = 1 2 2 3 

所以有与是10

+0

不要把'ceil'。 'floor(log10(number))'会给你你想要的十年,然后“添加一个”来找到整数中的位数。嗯,猜猜我应该在评论之前查看答案。 :-)对不起,@Divikar –

回答

7

倍数可以做这样的事情数的问题 -

A = [a,b,c,d] 
lens = floor(log10(abs(A)))+1 
lens(lens<0) = 0 %// Assuming that 0.xx numbers to have zero lengths 

样品试验:

案例#1:

>> A = [0.000, 1.1234, 33, 10, -222]; 
>> lens = floor(log10(abs(A)))+1; 
>> lens(lens<0) = 0 
lens = 
    0  1  2  2  3 

案例#2:

>> A = [-0.000, 1.1234 33, 10, -222, 0]; 
>> lens = floor(log10(abs(A)))+1; 
>> lens(lens<0) = 0 
lens = 
    0  1  2  2  3  0 
4

另一种办法是将它们转换为字符串,并检查长度:

cellfun(@(x)length(num2str(abs(fix(x)))),{a,b,c,d}); 

唯一复杂的是,你需要的细胞,让您的字符串分开。从@ Divakar的example input

输出:

>> a1 = 0.000; a2 = 1.1234; b = 33; c = 100; d = -222; 
>> cellfun(@(x)length(num2str(abs(fix(x)))),{a1,a2,b,c,d}) 

ans = 

    1  1  2  3  3 

所以它显然不会为1E-5的情况下给予0。

+0

'1'对于这样的'1e-5'来说似乎是个不错的选择,但我并不是100%确定这种情况下必须输出什么。 – Divakar

+0

@Divakar,我想这是符合约定。我打电话给0是一个长度为1的整数,但我可以很容易地想像OP的想法,否则:) –

+0

是的,我用这种方法来增加或缩小双倍:'x = 1.0034; y = str2num(strrep(num2str(x),'。','')); expo = log10(y/x)'等等 –