使用fprintf函数在matlab中格式化浮点

时间:2014-07-12 14:44:45

标签: matlab floating-point number-formatting

请考虑以下代码:

A1 = [9.9, 9900];
A2 = [8.8,  7.7 ; ...
      8800, 7700];
formatSpec = 'X is %4.2f meters or %8.3f mm\n';
fprintf(formatSpec, A1, A2)

X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm

我想知道4.2f8.3f在这种情况下的含义是什么?这是否意味着我们应该在.后使用多少位?

例如,通过查看代码,我觉得很难理解它们的意思,而.2.3看起来有点清晰,第一个数字4和{{1}变得难以解释,如果它与尾数和指数有关,那么为什么我们需要呢?

请帮我澄清一下这些事情

1 个答案:

答案 0 :(得分:1)

第一个数字表示打印时将占用的字符空格总数(包括分隔.)。第二个 - 正如您所指出的 - 代表小数位数 例如,如果您使用1.2打印8.3f,则在数字前面会有三个空格:

   1.200

12345678 characters total

如果你使用5.2f,你的输出就是。

 1.20

12345 characters total

我添加了第二行来说明字符总数(包括空格)。它不是原始输出的一部分


修改
在您的示例中,使用8.3f 1.2并不是很有意义。但是,如果您想将大量列数据写入一个可以被其他程序轻松读取的文件,这可能会更有用(因为格式可能是已知的)。例如。考虑两列%8.3f%8.3f(注意浮点数格式化器之间不需要空格)。这可以给你一个像这样的输出:

   1.200  34.564
8503.000 101.008

......等等。这里,领先的空白有助于。在这种情况下,当数字高于9999.999时,它将失败。


编辑2
在Matlab中,如果指定的总字符数小于小数点前的位数(或根本没有),则只打印整个数字。例如。使用%2.3f会给你

1.200

没有前导空格。如果你只关心打印的小数,你也可以使用%.3f再次导致

1.200