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

Posted

技术标签:

【中文标题】使用 fprintf 函数在 matlab 中格式化浮点数【英文标题】:format floating points in matlab using fprintf function 【发布时间】:2014-07-12 14:44:45 【问题描述】:

考虑以下代码:

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 看起来有点清楚,第一个数字 48 变得难以解释,如果它与尾数和指数有关,那我们为什么需要它呢?

请帮我澄清这些事情

【问题讨论】:

【参考方案1】:

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

   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  

【讨论】:

请等一下,1.200是5个字符,我现在看不懂 三个空的空间?我们为什么需要它? 例如我们有这样的 $2.3f 然后它输出错误对吗?

以上是关于使用 fprintf 函数在 matlab 中格式化浮点数的主要内容,如果未能解决你的问题,请参考以下文章

通过 sprintf() 和 fprintf() 的 Matlab ShortEng 数字格式?

matlab怎么显示数据

MATLAB---fopenfprintf函数

matlab中怎么输出一个变量的值?

MATLAB fwrite 怎么换行

MATLAB tic-toc以Minutes格式生成