在C中对齐printf()变量和小数

今天C的大问题。 所以我希望我的变量在列中对齐,同时是2位小数。

我知道要达到2位小数,我需要使用%.2f,如果我想要宽度,我使用%-30s。 但我无法将它们结合起来。 请参阅下面的代码,您将理解。

printf("ItemA %.2f @ $3.34 $ %.2f\n", huhu, totalhuhu); printf("ItemB %.2f @ $44.50 $ %.2f\n", haha, totalhaha); 

huhu,totalhuhu,haha,totalhaha都是浮点数。 我希望项目下的项目,价格在价格下对齐以及总数下的总数对齐是否1总数比另一个更多。

谢谢大家。

就个人而言,我会避免输出中的标签。 如果您小心,可以使对齐工作 – 主要是为每个项目使用相同的格式字符串。 (您选择的变量名称使得完全自动化变得更加困难;结构数组也有优势。)

如果您需要对货币敏感的格式,请查看strfmon()函数,并记住C程序在C语言环境中运行,直到您使用setlocale()设置不同的语言环境。

示例代码:

 #include  #include  #include  int main(void) { double huhu = 123.45; double haha = 234.56; double huhu_price = 3.34; double haha_price = 44.50; double totalhuhu = huhu * huhu_price; double totalhaha = haha * haha_price; char *huhu_name = "Item A"; char *haha_name = "Much Longer Name"; setlocale(LC_ALL, ""); const char fmt[] = "%-30s %10.2f @ $%6.2f $%20.2f\n"; printf(fmt, huhu_name, huhu, huhu_price, totalhuhu); printf(fmt, haha_name, haha, haha_price, totalhaha); char buffer1[32]; char buffer2[32]; const char p_fmt[] = "%-30s %10.2f @ %s %s\n"; const char price[] = "%(7.2n"; const char cost[] = "%(21.2n"; strfmon(buffer1, sizeof(buffer1), price, huhu_price); strfmon(buffer2, sizeof(buffer2), cost, totalhuhu); printf(p_fmt, huhu_name, huhu, buffer1, buffer2); strfmon(buffer1, sizeof(buffer1), price, haha_price); strfmon(buffer2, sizeof(buffer2), cost, totalhaha); printf(p_fmt, haha_name, haha, buffer1, buffer2); return 0; } 

样本输出:

 Item A 123.45 @ $ 3.34 $ 412.32 Much Longer Name 234.56 @ $ 44.50 $ 10437.92 Item A 123.45 @ $3.34 $412.32 Much Longer Name 234.56 @ $44.50 $10,437.92 

试试这个:

  printf("ItemA\t\t%30.2f @ $3.34 \t\t$ %30.2f\n", huhu, totalhuhu); printf("ItemB\t\t%30.2f @ $44.50\t\t$ %30.2f\n", haha, totalhaha); 

\ t是用于保持相似间距的标签。 您可以根据需要添加任意数量的内容,%30.2f将在小数点之前给出宽度为30,宽度为2之后。 这应该可以为您提供所需的间距结果。