我想显示具有预定义精度的矢量。例如,让我们考虑以下向量,
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(loggerContext);
configurator.doConfigure(this.getClass().getResource("/logback-config.groovy"));
如果我打电话,
v = [1.2346 2.0012 0.1230 0.0001 1.0000]
输出应该是,
mat2str(v, 1);
如果我打电话,
1.2 2.0 0.1 0.0 1.0
输出应该是,
mat2str(v, 2)
等等。
我尝试了这段代码,但结果是一个空矩阵:
1.24 2.00 0.12 0.00 1.00
如何显示具有预定义小数位数的矢量?
答案 0 :(得分:3)
format specifier for sprintf
已经提供了一种简单的方法,可以使用*
作为精度字段并将该值作为参数传递给sprintf
。因此,您的函数(我重命名为mat2prec
)可以写成如下:
function s = mat2prec(mat, precision)
s = sprintf('%.*f', precision, mat);
end
答案 1 :(得分:1)
function roundedmat2str(X,N)
NN = num2str(N); % Make a number of the precision
for ii = size(X,1):-1:1
out(ii,:) = sprintf(['%.' NN 'f \t'],X(ii,:)); % create string
end
disp(out)
end
X=magic(3)+rand(3);N=2;
MyRounding(X,N)
8.69 1.03 6.77
3.32 5.44 7.80
4.95 9.38 2.19
X = X(:).';
MyRounding(X,N)
8.69 3.32 4.95 1.03 5.44 9.38 6.77 7.80 2.19
请注意,sprintf
和fprintf
在设置小数位时已经进行了隐式舍入。
另外:请不要将现有的函数名称用于您自己的函数或变量。永远不要拨打金额sum
,平均mean
或mat2str mat2str
。执行total
,average
和roundedmat2str
等操作。这使您的代码可移植,并确保您在使用自己的函数时不会出错,但期望默认值,反之亦然。
答案 2 :(得分:1)
这个可以在我的Matlab 2014b上运行:
function s = mat2str(mat, precision)
printstring=strcat('%',num2str(precision),'.',num2str(precision),'f','\t');
s = sprintf(printstring, round(mat, precision));
end
答案 3 :(得分:1)
我认为这首先是你想做的事情:
s = sprintf(sprintf('%%.%df ', precision), mat)
修改强>
如果你想将问题扩展到矩阵,你可以使用这个稍微复杂的单行代码:
s = sprintf([repmat(sprintf('%%.%df ', precision), 1, size(mat, 2)) '\n'], mat')
与之前的单行有一个显着不同的地方是它以回车结束。