【发布时间】:2015-12-10 14:44:24
【问题描述】:
当我尝试格式化此输出时发生了一些奇怪的事情,看起来浮点数不正确?
我想让小数点对齐...我做错了吗?
if (flushParams -> Volume > 0)
{
printf("\n %-23s %7ld %2s %7ld %3s %2s %4.1f %1s %9s %4.1f %2s %9s %4.1f %2s",
"Intake Flush",
event_data -> water1.ml, "ml",
event_data -> water1.secs, "sec",
"LB", event_data -> water1.bat, "V",
"Average I", event_data -> water1.average_current, "mA",
"Highest I", event_data -> water1.highest_current, "mA");
Message(event_data -> water1.message);
printf("\n %-11s = %02d", "Flush port", event_data -> portwater);
}
printf("\n\n %-23s %7ld %2s %7ld %3s %2s %4.1f %1s %9s %4.1f %2s %9s %4.1f %2s",
"Sample",
event_data -> sample.ml, "ml",
event_data -> sample.secs, "sec",
"LB", event_data -> sample.bat, "V",
"Average I", event_data -> sample.average_current, "mA",
"Highest I", event_data -> sample.highest_current, "mA");
Message(event_data -> sample.message);
printf("\n %-11s = %02d", "Sample port", event_data -> portsample);
printf("\n ");
print_datetime(event_data -> time_off);
printf(" %3.1f Vbat %3.1f %cC PORT = %02d",
event_data -> vbat_off, event_data -> celcius_off, 248, event_data -> portend);
printf("\n");
输出如下所示:
Intake Flush 101 ml 34 sec LB 22.5 V Average I 113.0 mA Highest I 118.0 mA Volume reached
Flush port = 00
Sample 320 ml 141 sec LB 22.5 V Average I 91.0 mA Highest I 97.0 mA Volume reached
Sample port = 01
12/09/15 17:11:14 22.6 Vbat 22.5 øC PORT = 01
注意到“平均 I”和“最高 I”值没有对齐吗?默认情况下,它们不应该是正确的吗?我希望浮点数的最后显示数字将位于我为浮点数指定的 4 个字符空间中的最右侧位置。多头正按我预期的方式显示。
【问题讨论】:
-
"%4.1f"中 4 的宽度是输出的最小文本宽度。它包括符号、前导空格、(如果有指数,则为指数)以及数字。 -
请查看如何创建 MCVE (How to create a Minimal, Complete, and Verifiable Example?) 或 SSCCE (Short, Self-Contained, Correct Example) — 两个名称和链接用于相同的基本思想。此代码比 MCVE 复杂得多。有很多无关的材料需要处理,我们真的不应该处理。
-
谢谢大家...这就是问题所在,我会给你们所有人投票,但我还没有这样做的特权。另外,我很抱歉为这样一个简单的问题发布了这么多代码。从现在开始,我的示例将包含最少的代码来呈现我遇到的问题。
标签: c formatting printf