我知道要达到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总数比另一个更多。
谢谢大家。
答案 0 :(得分:3)
就个人而言,我会避免输出中的标签。如果您小心,可以使对齐工作 - 主要是为每个项目使用相同的格式字符串。 (您选择的变量名称使得完全自动化变得更难;结构数组也有优势。)
如果您需要对货币敏感的格式,请查看strfmon()
函数,并记住C程序在C语言环境中运行,直到您使用其他语言环境设置为止
setlocale()
#include <stdio.h>
#include <locale.h>
#include <monetary.h>
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
答案 1 :(得分:1)
试试这个:
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的宽度。这可以为您提供所需的间距结果。