我想计算一个整数的长度。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
我想计算一个整数的长度。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
倍数可以做这样的事情数的问题 -
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
另一种办法是将它们转换为字符串,并检查长度:
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。
'1'对于这样的'1e-5'来说似乎是个不错的选择,但我并不是100%确定这种情况下必须输出什么。 – Divakar
@Divakar,我想这是符合约定。我打电话给0是一个长度为1的整数,但我可以很容易地想像OP的想法,否则:) –
是的,我用这种方法来增加或缩小双倍:'x = 1.0034; y = str2num(strrep(num2str(x),'。','')); expo = log10(y/x)'等等 –
不要把'ceil'。 'floor(log10(number))'会给你你想要的十年,然后“添加一个”来找到整数中的位数。嗯,猜猜我应该在评论之前查看答案。 :-)对不起,@Divikar –