如何使用setw在我的号码前面输出“$”字符

问题描述 投票:0回答:1
#include <iostream>
#include <iomanip>
using std::cout;
using std::fixed;
using std::showpoint;
using std::setprecision;
int main()
{
  double number = 85495.5432334;
  cout << fixed << showpoint << setprecision(2) << setw(15) << 
    "string" << setw(15) << "$" << number;
  return 0;
}

上面的代码以 15 个字符输出右对齐的 $,但它没有右对齐数字。如何将“$”字符和后面的数字作为一项打印出来,并以 15 个字符右对齐,而不会丢失我的显示点/设置精度/固定操作?

我尝试使用“$”+number.toString(),这使得结果合理,但这破坏了我想要的 showpoint/fixed/set precision(2) 操作。我如何将它们整合在一起?

c++ visual-c++ iostream iomanip
1个回答
0
投票
#include <iomanip>
#include <iostream>
#include <locale>

int main() {
  // Treated as a number of pennies!
  double number = 85495.5432334 * 100.0;
  std::cout.imbue(std::locale("en_US.UTF-8"));

  [[maybe_unused]] auto old = std::cout.fill('.');
  std::cout << std::setw(15) << std::showbase << std::put_money(number) << '\n';
}

输出:

.....$85,495.54

根据您要打印的货币类型设置区域设置非常重要。

© www.soinside.com 2019 - 2024. All rights reserved.