我的代码是这样的
a= [2 4 5 8 6 7 88 9]
b= [12.8 41.3 13.7]
c= [16 18 20 10.1 17.5 49.5]
fprintf(out_file,'%d %d %d %d %d %d %d %d %f %f %f %d %d %d %f %f %f',a,b,c)
是否可以在 fprintf
中以较短的形式编写转换(%d....%f
)而不是重复多次?
或者是否有任何其他命令可以用来将其写入文件?
最佳答案
此答案假设您不需要尾随小数零。也就是说,[4 4.1]
应该打印为 4 4.1
,而不是 4 4.10000
或 4.00000 4.10000
。
让
a = [2 4 5 8 6 7 88 9];
b = [12.8 41.3 13.7];
c = [16 18 20 10.1 17.5 49.123456789]; % example with 9 decimal figures
您可以使用
repmat
和strjoin
动态构建格式字符串。此外,您可以使用 format specifier%g
,它会自动打印不带小数的整数值:fprintf(strjoin([repmat({'%g'},1,numel(a)+numel(b)+numel(c))]),a,b,c)
给予
2 4 5 8 6 7 88 9 12.8 41.3 13.7 16 18 20 10.1 17.5 49.1235
如果您需要指定多个有效数字,请避免尾随小数零:
fprintf(strjoin([repmat({'%.8g'},1,numel(a)+numel(b)+numel(c))]),a,b,c)
给予
2 4 5 8 6 7 88 9 12.8 41.3 13.7 16 18 20 10.1 17.5 49.123457
如果您可以使用尾随空格,则无需构建带有重复的格式字符串,因为
fprintf
可以自动 recycle 它为所有输入:fprintf('%.8g ',a,b,c)
给予
2 4 5 8 6 7 88 9 12.8 41.3 13.7 16 18 20 10.1 17.5 49.123457
关于matlab - 如何在matlab中使用fprintf简短地编写多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55061127/