matlab - 在 MATLAB 中指定打印值的最大宽度
问题描述
sprintf 和 fprintf 的字段宽度参数(例如,“sprintf('%nf',1234)”中的“n”)指定字段的最小宽度。这意味着较短的数字将被填充,但当需要保持指定的精度时,允许较长的数字超出指定的字段宽度。我正在寻找一种方法来指定最大字段宽度,以便宽度取代精度。
例如,我希望 1234.56、1234.56789 和 1.2345 的宽度为 8 个字符(包括小数点),因此分别打印为 1234.560、1234.567 和 1.234500。
这是一个类似的问题,但没有特定于 MATLAB 的解决方案 为数字指定最大 printf 字段宽度(必要时截断)?
我觉得以前一定有人遇到过这个问题,但我找不到任何相关的东西。如果存在类似问题,请提供链接。谢谢
解决方案
您可以使用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
编辑:
如果数字是集合的一部分(1,10,100 ...) ,我使用floor(log10())
而不是ceil(log10())
因此代码不会失败。10^n
现在这个片段可以处理负浮点数,因为我只取log10
输出的实部。
推荐阅读
- c# - 自包含,服务要求安装运行时
- javascript - 无法显示二级数组 JSON
- r - 启动时出现 R 错误:评估嵌套太深
- windows - 如何确定在经典 Windows 应用程序中如何调整窗口大小
- sql-server - SQL Server 连接失败 - Debezium - Kafka Connect
- java - 如何在电报机器人中看到来自 Java Web 应用程序的传入 POST 请求
- swift - 链接后无法使用 IBOutlets
- java - 从 Java 调用 Kotlin 时如何获取错误的行号?
- mixpanel - Mixpanel – 我如何将客人的财产运送到用户的财产?
- html - bootstrap 4容器中的奇怪垂直行