是否可以格式化sprintf
的输出,如下所示,或者我应该使用其他功能。
假设我有一个变量dt= 9.765625e-05
,我希望使用sprintf
来创建一个字符串,以便在保存时说出一个数字
fig = figure(nfig);
plot(x,y);
figStr = sprintf('NS2d_dt%e',dt);
saveas(fig,figStr,'pdf')
标点符号dot
给我带来了问题,有些系统错误了文件的格式。
figStr = sprintf('NS2d_dt%.2e',dt);
然后
figStr = NS2d_dt9.77e-05
使用
figStr = sprintf('NS2d_dt%.e',dt);
然后
figStr = NS2d_dt1e-04
这不够精确。我想要这样的东西 使用
figStr = sprintf('NS2d_dt%{??}e',dt);
然后
figStr = NS2d_dt9765e-08
答案 0 :(得分:1)
基本上,获得所需输出的唯一方法是对值或字符串进行一些操作。所以这里有两个解决方案,首先是一些字符串操作,然后是操纵值。希望这两种方法有助于解决其他问题的解决方案,尤其是数字操作。
fmt = @(x) sprintf('%d%.0fe%03d', (sscanf(sprintf('%.4e', x), '%d.%de%d').' .* [1 0.1 1]) - [0 0.5 3]);
首先,我使用sprintf
以定义的格式打印数字
>> sprintf('%.4e', dt)
ans =
9.7656e-05
然后sscanf
将其读回来确保删除.
和e
>> sscanf(sprintf('%.4e', dt), '%d.%de%d').'
ans =
9 7656 -5
在打印之前,我们执行一些数据操作以获得正确的打印值
>> (sscanf(sprintf('%.4e', dt), '%d.%de%d').' .* [1 0.1 1]) - [0 0.5 3]
ans =
9 765.1 -8
现在我们打印
>> sprintf('%d%.0fe%03d', (sscanf(sprintf('%.4e', dt), '%d.%de%d').' .* [1 0.1 1]) - [0 0.5 3])
ans =
9765e-08
orderof = @(x) floor(log10(abs(x)));
fmt = @(x) sprintf('%.0fe%03d', x*(10^(abs(orderof(x))+3))-0.5, orderof(x)-3);
首先,我创建一个匿名orderof
函数,它告诉我输入值的顺序(e
之后的数字)。所以
>> dt = 9.765625e-05;
>> orderof(dt)
ans =
-5
接下来我们操纵数字将其转换为4位整数,这是在
中添加3
的效果
>> floor(dt*(10^(abs(orderof(dt))+3)))
ans =
9756
最后在打印值之前,我们需要用
计算出新的指数>> orderof(x)-3
ans =
-8
打印将给我们
>> sprintf('%.0fe%03d', floor(dt*(10^(abs(orderof(dt))+3))), orderof(dt)-3)
ans =
9765e-08
答案 1 :(得分:0)
figStr = sprintf('NS2d_dt%1.4e',dt)
figStr =
NS2d_dt9.7656e-05
将数字(1.4
此处)指定为NumbersBeforeDecimal(dot)NumbersAfterDecimal。
关于您的请求:
A = num2str(dt); %// convert to string
B = A([1 3 4 5]); %// extract first four digits
C = A(end-2:end); %// extract power
fspec = 'NS2d_dt%de%d'; %// format spec
sprintf(fspec ,str2num(B),str2num(C)-3)
NS2d_dt9765e-8
答案 2 :(得分:0)
阅读你的问题,
标点符号圆点给我带来了问题,有些系统错误了文件的格式。
在我看来,您实际的问题是,当您使用例如
构建文件名时figStr = sprintf('NS2d_dt%.2e',dt);
你得到了
figStr = NS2d_dt9.77e-05
然后,当您将该字符串用作文件名时,.
被解释为扩展名并且.pdf
未附加,因此在Explorer
中您无法打开文件双击它。
考虑到将dt
的数字从9.765e-05
更改为9765e-08
似乎非常奇怪,您可以尝试以下方法:
print
功能将您的数字保存在.pdf
.pdf
说明符format
这应该允许您拥有正确的文件扩展名和dt
值的正确格式。
peaks
figStr = sprintf('NS2d_dt_%.2e.pdf',dt);
print(gcf,'-dpdf', figStr )
希望这有帮助。