为什么 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
是整数。这意味着 X
次 10
的 y
次方,可以形象化为“将点向右移动 y
个位置”(如果 y
为负)。
强制 MATLAB 显示所有小数
现在我们知道了 MATLAB 的功能,我们可以强制它显示我们的号码吗?当然,有多种选择,最简单的是设置更长的 format
。最常用于显示长数字的是format long
和format 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 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
即它们在单个数字上的工作方式类似于 long
和 short
,但会为每个数字选择最方便的显示格式。
还有一些更奇特的选项,例如 shortE
、shortEng
、hex
等,但您可以在 The MathWork's own documentation on format
.[=44= 中找到详细记录的选项]
假设我创建了一些数字 A
,顺序为 10^4
:
A = 81472.368639;
disp(A)
8.1472e+04
那不是我想要的。我的小数在哪里?应该还有六位小数。检查变量编辑器显示如下:
我又丢了小数点。我如何保留这些以供进一步计算?
科学计数法,或者为什么你没有丢失任何小数
您没有丢失任何小数,这只是 MATLAB 显示大数的方式。 MATLAB 使用科学记数法将命令 window 和变量编辑器中的数字显示四舍五入到点前一位和点后四位。科学记数法是 Xe+y
记数法,其中 X
是某个数字,y
是整数。这意味着 X
次 10
的 y
次方,可以形象化为“将点向右移动 y
个位置”(如果 y
为负)。
强制 MATLAB 显示所有小数
现在我们知道了 MATLAB 的功能,我们可以强制它显示我们的号码吗?当然,有多种选择,最简单的是设置更长的 format
。最常用于显示长数字的是format long
和format 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 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
即它们在单个数字上的工作方式类似于 long
和 short
,但会为每个数字选择最方便的显示格式。
还有一些更奇特的选项,例如 shortE
、shortEng
、hex
等,但您可以在 The MathWork's own documentation on format
.[=44= 中找到详细记录的选项]