如何组合有效数字、列宽与对齐说明符实现美元金额格式化打印?
问题:格式化美元金额实现固定列宽左对齐并保留两位小数
我希望打印double类型数值时保持一致的列宽,这些数值代表美元金额,因此小数部分最多保留两位。
我原本打算同时使用有效数字说明符%1.2f(过去一直可用)以及左对齐的列宽说明符%-10f,但不知道如何将二者组合,使数值既保留两位小数,又在10字符宽度的列内左对齐。
尝试使用以下代码:
void displayBooks(float *balances, float *interests, int size) { printf("balance interest\n"); for (int i=0; i<size; ++i) { printf("%1.2-10f", balances[i]); printf("%1.2-10f", interests[i]); } }
但该格式符未被程序识别,直接打印出%1.2-10f文本。请问应如何修改代码以实现预期效果?
解决方案
你搞错了printf格式说明符的组合顺序,正确的格式符应该是%-10.2f,各部分含义如下:
-:指定输出内容左对齐10:设置总输出宽度为10个字符(包含整数部分、小数点和小数部分).2:限定小数部分保留两位f:表示按浮点数格式输出
修改后的代码如下:
void displayBooks(float *balances, float *interests, int size) { printf("balance interest\n"); for (int i=0; i<size; ++i) { printf("%-10.2f", balances[i]); printf("%-10.2f\n", interests[i]); // 添加换行符,让每组数据单独占一行 } }
补充说明:如果你的变量实际是double类型(而非代码里的float),格式符改用%-10.2lf即可,效果一致。
内容的提问来源于stack exchange,提问作者Gideon
相关产品推荐
相关产品推荐

