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的作用,我们可以强迫它向我们展示我们的数字吗?当然,有几种选择,最简单的是设置更长的时间format.最常用的显示长号码format long和format 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仍在内部存储,默认情况下它只显示较少的小数.
formatformat有另一个不错的属性,你可以设置format compact,摆脱所有额外的空行:
format compact
format long
A
A =
8.147236863931789e+04
format longG
A
A =
81472.3686393179
Run Code Online (Sandbox Code Playgroud)
在我看来,当你不想让你的命令窗口非常大,但不想滚动很多时,我觉得非常方便.
format shortG而format 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)
即他们的工作就像long和short单数,但选择最方便的显示格式为每个号码.
有几个奇异期权,像shortE,shortEng,hex等等,但这些可以在找到有据可查的MathWork自己的文档上format.