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

Adr*_*aan 8 floating-point matlab numbers number-formatting

假设我创建了一些A订单号码10^4:

A = 81472.368639;
disp(A)
   8.1472e+04
Run Code Online (Sandbox Code Playgroud)

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

变量编辑器

再次,我丢失了小数.如何保留这些以进行进一步计算?

Adr*_*aan 12

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

你没有丢失任何小数,这只是MATLAB显示大数字的方式.MATLAB使用科学计数法将命令窗口和变量编辑器中数字的显示四舍五入到点之前的一位数和之后的四位数.科学记数法是Xe+y符号,其中X有一些数字和y一个整数.这意味着X时间10的力量y,可以看作"将点向右移位y"(如果y是负的则向左移动).

强制MATLAB显示所有小数

既然我们知道MATLAB的作用,我们可以强迫它向我们展示我们的数字吗?当然,有几种选择,最简单的是设置更长的时间format.最常用的显示长号码format longformat longG,其区别是显而易见的,当我们使用它们:

format long
A

A =

     8.1472368639e+04

format longG
A

A =

          81472.368639
Run Code Online (Sandbox Code Playgroud)

format long使用科学记数法显示所有小数(最多16个),format longG尝试显示没有科学记数法但最多可用小数的数字:同样地:在点之前和之后总共有多达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
Run Code Online (Sandbox Code Playgroud)

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

单击后变量编辑器

所以,简而言之:我们在此过程中没有丢失任何小数,MATLAB仍在内部存储,默认情况下它只显示较少的小数.


其他用途 format

format有另一个不错的属性,你可以设置format compact,摆脱所有额外的空行:

format compact
format long
A
A =
     8.147236863931789e+04
format longG
A
A =
          81472.3686393179
Run Code Online (Sandbox Code Playgroud)

在我看来,当你不想让你的命令窗口非常大,但不想滚动很多时,我觉得非常方便.

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
Run Code Online (Sandbox Code Playgroud)

即他们的工作就像longshort单数,但选择最方便的显示格式为每个号码.

有几个奇异期权,像shortE,shortEng,hex等等,但这些可以在找到有据可查的MathWork自己的文档上format.