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

更新於: 2021年10月11日

857 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.