使用matlab,如何找到十进制数的最后两位数?

时间:2014-05-24 11:19:55

标签: matlab decimal digit

如何使用MATLAB找到十进制数的最后两位数?

示例:

59  for 1.23000659
35  for 56368.35
12  for 548695412

3 个答案:

答案 0 :(得分:1)

如果您的十进制数字包含许多整数位数和小数位,则始终存在问题。在这种情况下,整数和小数位数决定了我们在估计最后两位数时是否正确。让我们来看看代码和评论。

<强>代码

%// num is the input decimal number

t1 = num2str(num,'%1.15e') %// Convert number to exponential notation
t1 = t1(1:strfind(t1,'e')-1)
lastind = find(t1-'0',1,'last')
out = str2num(t1(lastind-1:lastind)) %// desired output

结果和结论

  1. 对于num = 1.23000659,它将输出打印为59,这是正确的谢谢 事实上,整数和十进制数字的数量不能相加 超过16岁。

  2. 对于num = 56368.35,我们得到输出为35,这是再次正确的和 原因和以前一样。

  3. 对于num = 548695412,我们得到正确的输出12因为 同样有充分的理由。

  4. 对于num = 2736232.3927327329236576的问题样本 (故意选择一个带有许多整数和小数位数的数字), 代码运行给出输出为33这是错误的,原因可能是 从整数和十进制数字加起来的事实推断出来 比代码可以处理的数字更大。

  5. 如果要处理像第4个这样的极端情况,可以查看MATLAB命令vpa以获得更高的精度。

答案 1 :(得分:0)

转换为字符串,然后提取最后两个字符:

x = 1.23;           % x = 1.23
s = num2str(x);     % s = "1.23"
t = s(end-1:end);   % t = "23"
u = str2num(t);     % u = 23

注意:根据您的具体需求,您可能希望提供precisionformatSpecnum2str

答案 2 :(得分:0)

另外两个答案很好而且直截了当,但在这里你有一种数学方法可以做到这一点;)

假设a为您的号码,

ashift=0.01*a; %shift the last two digits

afloor=floor(ashift); %crop the last two digits

LastDecimals=a-100*afloor; %substract the cropped number form the original, only the last two digits left.

当然,如果您有非自然数字,您也可以使用与上述相同的“减去和减去技术”来解决这些问题。