Путаница по поводу std :: get_money и std :: put_money в C ++ - PullRequest
6 голосов
/ 21 апреля 2019

Я запутался с функцией C ++ std::get_money, определенной в заголовочном файле <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.

Каковы некоторые примеры его фактического использования?

1 Ответ

1 голос
/ 21 апреля 2019

Это часть стандартной библиотеки, о которой я не знал, что она существует!Согласно 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';
  }
}

Тем не менее, мне это кажется немного привередливым.Номер должен включать ., по крайней мере, с двумя цифрами после него.$ является необязательным.

...