使用 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.2f
或8.3f
在这种情况下是什么意思?这是否意味着我们应该在.
之后使用多少位?
例如通过查看代码,我似乎很难理解它们的含义,而 .2
或 .3
看起来有点清楚,第一个数字 4
和 8
变得难以解释,如果它与尾数和指数有关,那我们为什么需要它呢?
请帮我澄清这些事情
【问题讨论】:
【参考方案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 中格式化浮点数的主要内容,如果未能解决你的问题,请参考以下文章