C++程序打印值到指定格式
假设我们得到三个双精度浮点数。我们需要对它们进行格式化,并按照以下格式打印。
我们需要以十六进制格式(使用小写字母)打印第一个值的整数部分。
我们需要打印第二个值,保留两位小数,并在其前面加上符号以表示其正负。第二个值需要右对齐,宽度为15个字符,左侧未使用的位置用下划线填充。
我们需要以科学计数法打印第三个值,保留九位小数。
因此,如果输入为 256.367、5783.489、12.5643295643,则输出将为
0x100 _______+5783.49 1.256432956E+01
为了解决这个问题,我们将遵循以下步骤:
hex 标记以十六进制格式打印值,showbase 标记显示十六进制值的“0x”前缀,left 标记通过在值的右侧插入填充字符来将值填充到输出字段,nouppercase 标记以全部小写字母打印输出。
right 标记通过在值的左侧插入填充字符来将值填充到输出字段,fixed 标记以定点表示法打印值,set(15) 将输出字段长度设置为 15,showpos 标记在输出前面插入“+”符号,setfill('_') 用下划线填充输出,setprecision() 将值的精度设置为最多两位小数。
setprecision() 将值的精度设置为最多九位小数,scientific 标记以科学计数法打印值,uppercase 使输出值全部大写,noshowpos 省略输出值前面的任何正号。
让我们看看以下实现以更好地理解:
#include <iostream> #include <iomanip> using namespace std; void solve(double a, double b, double c) { cout << hex << showbase << nouppercase << left << (long long) a << endl; cout << right << fixed << setw(15) << setfill('_') << setprecision(2) << showpos << b << endl; cout << setprecision(9) << scientific << uppercase << noshowpos << c << endl; } int main() { solve(256.367, 5783.489, 12.5643295643); return 0; }
输入
256.367, 5783.489, 12.5643295643
输出
0x100 _______+5783.49 1.256432956E+01
广告