代码之家  ›  专栏  ›  技术社区  ›  Adriaan Decoder

为什么MATLAB删除了我的小数?

  •  7
  • Adriaan Decoder  · 技术社区  · 6 年前

    假设我创建了一些数字 A ,订单的 10^4 :

    A = 81472.368639;
    disp(A)
       8.1472e+04
    

    那不是我想要的。我的小数在哪里?应该还有六位小数。检查变量编辑器会显示以下内容:

    Variable editor

    我又一次丢失了小数。如何保存这些以供进一步计算?

    1 回复  |  直到 6 年前
        1
  •  13
  •   Adriaan Decoder    4 年前

    科学记数法,或者为什么你没有丢失任何小数

    您没有丢失任何小数,这只是MATLAB显示大数字的方式。MATLAB使用科学记数法将命令窗口和变量编辑器中的数字显示四舍五入到点前一位,点后四位。科学记数法是 Xe+y 符号,其中 X 是一些数字 y 一个整数。这意味着 十、 时代 10 到的权力 y ,可以可视化为“将点向右移动 y 放置“(如果 y 是负数)。

    强制MATLAB显示所有小数

    既然我们知道了MATLAB的功能,我们能强迫它显示我们的数字吗?当然,有几种选择,最简单的是设置更长的 format 。最常用于显示长数字的有 format long format longG ,当我们使用它们时,它们的区别很明显:

    format long
    A
    
    A =
    
         8.1472368639e+04
    
    format longG
    A
    
    A =
    
              81472.368639
    

    长格式 使用科学记数法显示所有小数(最多16位), 格式Long 再次尝试不使用科学记数法而是使用大多数可用的小数来显示数字:总共有多达16位数字,包括点之前和之后的数字。

    更奇特的解决方案是使用 disp(sprintf()) fprintf 如果需要点前、点后或两者的精确小数位数:

    fprintf('A = %5.3f\n',A) % \n is just to force a line break
    A = 81472.369
    disp(sprintf('A = %5.2f\n',A))
    A = 81472.37
    

    最后,还记得变量编辑器吗?我们如何得到它来完整地显示我们的变量?简单:单击包含数字的单元格:

    Variable editor after clicking

    所以,简而言之:我们没有丢失任何小数,MATLAB仍然在内部存储它们,它只是默认显示更少的小数。


    的其他用途 总体安排

    总体安排 还有一个很好的特性,可以设置 format compact ,它去除了MATLAB通常在命令窗口中添加的所有其他空行:

    format compact
    format long
    A
    A =
         8.147236863931789e+04
    format longG
    A
    A =
              81472.3686393179
    

    在我看来,当你不想让你的命令窗口很大,但也不想滚动太多的时候,这是非常方便的。

    format shortG 格式Long 当数组中有非常不同的数字时,它们很有用:

    b = 10.^(-3:3);
    A.*b
    ans =
       1.0e+07 *
        0.0000    0.0001    0.0008    0.0081    0.0815    0.8147    8.1472
    format longG
    A.*b
    ans =
      Columns 1 through 3
                  81.472368639              814.72368639              8147.2368639
      Columns 4 through 6
                  81472.368639              814723.68639              8147236.8639
      Column 7
                  81472368.639
    format shortG
    A.*b
    ans =
           81.472       814.72       8147.2        81472   8.1472e+05   8.1472e+06   8.1472e+07
    

    i、 e.他们工作得很好 long short 但为每个数字选择最方便的显示格式。

    还有一些更奇特的选择,比如 shortE ,则, shortEng ,则, hex 等等,但您可以在 The MathWork's own documentation on format