【问题标题】:Using matlab,how to find the last two digits of a decimal number?使用matlab,如何找到十进制数的最后两位?
【发布时间】:2014-05-24 11:19:54
【问题描述】:

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

例子:

59  for 1.23000659
35  for 56368.35
12  for 548695412

【问题讨论】:

    标签: matlab decimal digit


    【解决方案1】:

    当您有一个包含许多整数位和小数位的十进制数时,总会出现问题。在这种情况下,整数和小数位数决定了我们在估计最后两位数时是否正确。让我们看看代码和之后的 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
    

    结果和结论

    1. 对于 num = 1.23000659,它将输出打印为 59,这是正确的,谢谢 整数和小数位数不加起来的事实 超过 16 个。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      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 提供precisionformatSpec

      【讨论】:

        【解决方案3】:

        其他两个答案很好而且很直接,但在这里你有一个数学方法;)

        假设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.
        

        当然,如果您有非自然数,您也可以使用与上述相同的“地板和减法”技术来计算它们。

        【讨论】:

          猜你喜欢
          • 2017-06-07
          • 2021-06-08
          • 2013-03-18
          • 2021-12-12
          • 2016-10-14
          • 2015-07-04
          • 1970-01-01
          • 2016-01-27
          相关资源
          最近更新 更多