C++ 98/03 была money_get
огранку, чтобы делать такие вещи. К сожалению, использование этого было довольно болезненным (чтобы это было приятно).
C++ 11 добавлен манипулятор get_money
, чтобы сделать жизнь немного проще. Он работает примерно так:
#include <iostream>
#include <iomanip>
int main() {
long double amt;
std::cin.imbue(std::locale(""));
std::cout.imbue(std::locale(""));
std::cin >> std::get_money(amt);
std::cout << std::showbase << std::put_money(amt) << "\n";
}
Теперь, здесь есть пара вещей. Прежде всего, преобразование из внешнего в внутреннее представление не указано, но в реализациях, которые я видел, $3458.5
будет не быть прочитанным как 3458.5
- он должен быть прочитан и сохранен как 345850
- то есть , подсчет количества копеек.
Если вы используете put_money
для записи данных, то он будет преобразован симметрично с тем, что было сделано во время ввода, поэтому, если вы ввели $3458.5
, он будет записан обратно таким же образом.
Существует еще один нюанс: я видел, по крайней мере, одна реализации, которая была странно привередливо о формате ввод, поэтому требуется либо 0, либо 2 цифры после десятичной точки во время ввода, так как $3458.50
или $3458
будет читать хорошо, но $3458.5
не будет читаться вообще (это будет рассматриваться как неудачное преобразование).
Это звучит как небольшая неэффективность, о которой вы не должны беспокоиться :) –
Я стараюсь держаться подальше от языка C++, потому что я нахожу его слишком сложным и навязчивым и даже не переносным из-за отсутствия поддержки реализации, но там * это * ['std :: money_get'] (http://en.cppreference.com/w/cpp/locale/money_get) и связанное с ним оборудование. Насколько я помню, П.Я.Плаугер написал серию статей о том, как ее использовать. Возможно, стоит поиграть в игру - или нет, IDK. Примером непереносимости является использование языкового стандарта UTF-8 в примере кода для документов, с которыми я связан, на cppreference.com. Это не сработает с Visual C++, где документировано, что локали UTF-8 не поддерживаются. –
В стороне: переменные с плавающей запятой и валюта не очень хорошо сочетаются. – edmz