首页 > 解决方案 > C++ 中对 std::get_money 和 std::put_money 的混淆

问题描述

我对头文件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。输出和货币格式之间的关系是什么?我阅读了此参考资料,但无法理解其中的关系。std::put_money,std::get_time和也存在同样的混淆std::put_time

有哪些实际使用的例子?

标签: c++iomanip

解决方案


这是我不知道存在的标准库的一部分!根据cppreference,您必须设置语言环境来定义时间和金钱的格式。这里我使用的是 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';
  }
}

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


推荐阅读