在 MATLAB 中指定打印值的最大宽度
Specify maximum width of printed value in MATLAB
sprintf 和 fprintf 的字段宽度参数(例如,"sprintf('%nf',1234)" 中的 "n")指定字段的 最小值 宽度。这意味着较短的数字将被填充,但较长的数字将被允许超出指定的字段宽度,如果这是保持指定精度所必需的。我正在寻找一种方法来指定 最大 字段宽度,以便宽度取代精度。
例如,我希望 1234.56、1234.56789 和 1.2345 的宽度为 8 个字符(包括小数点),因此分别打印为 1234.560、1234.567 和 1.234500。
这是一个类似的问题,但没有特定于 MATLAB 的解决方案
Specifying maximum printf field width for numbers (truncating if necessary)?
我觉得以前肯定有人遇到过这个问题,但我找不到任何相关的东西。如果存在类似问题,请提供 link。谢谢
您可以使用 floor(log10())
来确定您有多少个非浮动数字:
X = [1234.56, 1234.56789, 1.2345]
n = 8 % number of total digits.
% We create an array of string containing the format:
%[ '%.4f\n'
% '%.4f\n'
% '%.7f\n' ]
form = strcat('%.',num2str(n-1-floor(real(log10(X))).'),'f\n')
% We concatenate this array into one single string and we print the result:
fprintf(reshape(form.',1,[]),X)
或者您可以使用 for 循环(使用相同的逻辑):
for x = X
form = strcat('%.',num2str(7-floor(real(log10(x)))),'f\n');
fprintf(form,x)
end
我们得到:
1234.5600
1234.5679
1.2345000
编辑:
我使用 floor(log10())
而不是 ceil(log10())
,因此如果数字是集合 10^n
(1,10,100...)的一部分,代码将不会失败。
现在这段代码可以处理负浮点数,因为我只取 log10
输出的实部。
如果您不介意截断而不是四舍五入隐藏数字,请尝试
S = num2str( X(:), '%-10.9f'); % creates a left-justified character-array
fprintf( '%s\n', string( S(:,1:7) ) )
(需要检查 X 的值是否太大。)
sprintf 和 fprintf 的字段宽度参数(例如,"sprintf('%nf',1234)" 中的 "n")指定字段的 最小值 宽度。这意味着较短的数字将被填充,但较长的数字将被允许超出指定的字段宽度,如果这是保持指定精度所必需的。我正在寻找一种方法来指定 最大 字段宽度,以便宽度取代精度。
例如,我希望 1234.56、1234.56789 和 1.2345 的宽度为 8 个字符(包括小数点),因此分别打印为 1234.560、1234.567 和 1.234500。
这是一个类似的问题,但没有特定于 MATLAB 的解决方案 Specifying maximum printf field width for numbers (truncating if necessary)?
我觉得以前肯定有人遇到过这个问题,但我找不到任何相关的东西。如果存在类似问题,请提供 link。谢谢
您可以使用 floor(log10())
来确定您有多少个非浮动数字:
X = [1234.56, 1234.56789, 1.2345]
n = 8 % number of total digits.
% We create an array of string containing the format:
%[ '%.4f\n'
% '%.4f\n'
% '%.7f\n' ]
form = strcat('%.',num2str(n-1-floor(real(log10(X))).'),'f\n')
% We concatenate this array into one single string and we print the result:
fprintf(reshape(form.',1,[]),X)
或者您可以使用 for 循环(使用相同的逻辑):
for x = X
form = strcat('%.',num2str(7-floor(real(log10(x)))),'f\n');
fprintf(form,x)
end
我们得到:
1234.5600
1234.5679
1.2345000
编辑:
我使用 floor(log10())
而不是 ceil(log10())
,因此如果数字是集合 10^n
(1,10,100...)的一部分,代码将不会失败。
现在这段代码可以处理负浮点数,因为我只取 log10
输出的实部。
如果您不介意截断而不是四舍五入隐藏数字,请尝试
S = num2str( X(:), '%-10.9f'); % creates a left-justified character-array
fprintf( '%s\n', string( S(:,1:7) ) )
(需要检查 X 的值是否太大。)