在C ++中对std :: get_money和s​​td :: put_money的困惑

时间:2019-04-21 04:55:49

标签: c++ iomanip

我对std::get_money头文件中定义的C ++函数<iomanip>感到困惑。根据编程概念,get_money的用途是什么?

我使用std::get_money使用以下代码。

#include <iostream>     // std::cin, std::cout
#include <iomanip>      // std::get_money

int main ()
{
  long double price;
  std::cout << "Please, enter the price: ";
  std::cin >> std::get_money(price);

  if (std::cin.fail()) std::cout << "Error reading price\n";
  else std::cout << "The price entered is: " << price << '\n';

  return 0;
}

当我输入100.25时,它返回100。输出和货币格式之间是什么关系?我阅读了this参考,但无法理解该关系。 std::put_moneystd::get_timestd::put_time存在相同的困惑。

实际使用的例子有哪些?

1 个答案:

答案 0 :(得分:1)

这是我不知道存在的标准库的一部分!根据{{​​3}},您必须设置区域设置以定义应如何格式化时间和金钱。在这里,我使用的是en_US语言环境。

#include <iomanip>
#include <iostream>

int main() {
  long double price;
  std::cin.imbue(std::locale("en_US.UTF-8"));
  std::cout << "Please enter the price: ";
  std::cin >> std::get_money(price);
  if (std::cin.fail()) {
    std::cout << "Error reading price\n";
  } else {
    std::cout << "The price entered is: " << price << '\n';
  }
}

不过,这对我来说似乎有点挑剔。该数字必须包含一个.,后跟至少两位数字。 $是可选的。