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

Why did MATLAB delete my decimals?

假设我创建了一些数字 A,顺序为 10^4:

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

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

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

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

您没有丢失任何小数,这只是 MATLAB 显示大数的方式。 MATLAB 使用科学记数法将命令 window 和变量编辑器中的数字显示四舍五入到点前一位和点后四位。科学记数法是 Xe+y 记数法,其中 X 是某个数字,y 是整数。这意味着 X10y 次方,可以形象化为“将点向右移动 y 个位置”(如果 y为负)。

强制 MATLAB 显示所有小数

现在我们知道了 MATLAB 的功能,我们可以强制它显示我们的号码吗?当然,有多种选择,最简单的是设置更长的 format。最常用于显示长数字的是format longformat longG,使用时区别很明显:

format long
A

A =

     8.1472368639e+04

format longG
A

A =

          81472.368639

format long 使用科学记数法显示所有小数(总共最多 16 位),format longG 尝试显示没有科学记数法但有最多可用小数的数字,同样:尽可能多或最多点前后共 16 位数字。

如果您想要点之前、点之后或两者的精确小数位数,则使用 disp(sprintf()) or 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

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

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


format

的其他用途

format 有另一个很好的 属性,因为您可以设置 format compact,它摆脱了 MATLAB 通常在命令 window 中添加的所有额外空行:

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

在我看来,当您不想让您的命令 window 非常大,但又不想滚动太多时,这非常方便。

format shortGformat longG 当你的数组中有非常不同的数字时很有用:

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

即它们在单个数字上的工作方式类似于 longshort,但会为每个数字选择最方便的显示格式。

还有一些更奇特的选项,例如 shortEshortEnghex 等,但您可以在 The MathWork's own documentation on format.[=44= 中找到详细记录的选项]