【发布时间】:2014-05-24 11:19:54
【问题描述】:
如何使用MATLAB 找到十进制数的最后两位?
例子:
59 for 1.23000659
35 for 56368.35
12 for 548695412
【问题讨论】:
如何使用MATLAB 找到十进制数的最后两位?
例子:
59 for 1.23000659
35 for 56368.35
12 for 548695412
【问题讨论】:
当您有一个包含许多整数位和小数位的十进制数时,总会出现问题。在这种情况下,整数和小数位数决定了我们在估计最后两位数时是否正确。让我们看看代码和之后的 cmets。
代码
%// 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,这是错误的,原因可能是 从整数和十进制数字加起来很多的事实推断 大于代码可以处理的数字。
如果要处理像第四个这样的极端情况,可以查看 MATLAB 命令vpa 以获得更高的精度。
【讨论】:
转换为字符串,然后提取最后两个字符:
x = 1.23; % x = 1.23
s = num2str(x); % s = "1.23"
t = s(end-1:end); % t = "23"
u = str2num(t); % u = 23
注意:根据您的具体需求,您可能需要向num2str 提供precision 或formatSpec。
【讨论】:
其他两个答案很好而且很直接,但在这里你有一个数学方法;)
假设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.
当然,如果您有非自然数,您也可以使用与上述相同的“地板和减法”技术来计算它们。
【讨论】: