【问题标题】:Why did MATLAB delete my decimals?为什么 MATLAB 删除了我的小数?
【发布时间】:2018-08-17 21:30:20
【问题描述】:

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

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

这不是我想要的。我的小数点在哪里?应该还有六位小数。检查变量编辑器向我展示了这一点:

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

【问题讨论】:

    标签: matlab floating-point numbers number-formatting


    【解决方案1】:

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

    您没有丢失任何小数,这只是 MATLAB 显示大数的方式。 MATLAB 使用科学计数法将命令窗口和变量编辑器中的数字显示四舍五入到点前一位数和后四位数。科学计数法是Xe+y 表示法,其中X 是某个数字,y 是一个整数。这意味着X 乘以10y 的幂,可以将其可视化为“将点向右移动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())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 通常在命令窗口中添加的所有额外空行:

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

    我认为,当您不想让命令窗口变得很大但又不想滚动很多时,这非常方便。

    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 中找到详细记录的选项。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2022-11-26
      • 2023-01-14
      • 1970-01-01
      相关资源
      最近更新 更多