如何使用MATLAB
找到十进制数的最后两位数?
示例:
59 for 1.23000659
35 for 56368.35
12 for 548695412
答案 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
结果和结论
对于num = 1.23000659,它将输出打印为59,这是正确的谢谢 事实上,整数和十进制数字的数量不能相加 超过16岁。
对于num = 56368.35,我们得到输出为35,这是再次正确的和 原因和以前一样。
对于num = 548695412,我们得到正确的输出12因为 同样有充分的理由。
对于num = 2736232.3927327329236576的问题样本 (故意选择一个带有许多整数和小数位数的数字), 代码运行给出输出为33这是错误的,原因可能是 从整数和十进制数字加起来的事实推断出来 比代码可以处理的数字更大。
如果要处理像第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
注意:根据您的具体需求,您可能希望提供precision
或formatSpec
至num2str。
答案 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.
当然,如果您有非自然数字,您也可以使用与上述相同的“减去和减去技术”来解决这些问题。