}
void writeMoney(ostream& out, long double val, bool intl = false) {
// Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΡΠ΅Ρ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ
const money_put<char>& moneyWriter =
use_facet<money_put<char> >(out.getloc());
// ΠΠ°ΠΏΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΡΠΎΠΊ. ΠΡΠ·Π²Π°ΡΡ failed() (Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ
// ostreambuf_iterator), ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
if (moneyWriter.put(out, intl, out, out.fill(), val).failed())
throw "Couldn't write money!\n";
}
int main() {
long double val = 0;
float exchangeRate = 0.775434f; // ΠΡΡΡ Π΄ΠΎΠ»Π»Π°ΡΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π΅Π²ΡΠΎ
locale locEn("english");
locale locFr("french");
cout << "Dollars: ";
cin.imbue(locEn);
val = readMoney(cin, false);
cout.imbue(locFr);
// Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ showbase, ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π²Π°Π»ΡΡΡ
cout.setf(ios_base::showbase);
cout << "Euros: ";
writeMoney(cout, val = exchangeRate, true);
}
ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° 13.6, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
Dollars: $100
Euros: EUR77,54
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Π€Π°ΡΠ΅ΡΡ money_put ΠΈ money_get Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π΅Π½Π΅ΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊ ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΡ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΡΠ΅ΡΡ Π΄Π°ΡΡ/Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΠ°ΡΠ΅ΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ΅ΡΠ΅ΠΏΡΠ°Ρ . Π‘ΡΠ°Π½Π΄Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΈ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ money_put<char> ΠΈ money_put<wchar_t>. ΠΠ°ΠΊ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΡΠ΅ΡΠΎΠ², ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½Ρ, Π½ΠΎ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. money_get ΠΈ money_put ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠ»Π°ΡΡ moneypunct, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°ΠΏΠΈΡΡ Π΄Π΅Π½Π΅ΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠΎΡΠΎΠΊ. ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠΉ ΡΡΠΌΠΌΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ: Π·Π½Π°ΠΊΠ° Π²Π°Π»ΡΡΡ, Π·Π½Π°ΠΊΠ° ΠΏΠ»ΡΡ ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΡΡ, ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΡΡΡΡΡ ΠΈ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΡΠ΅ ΠΎΠ½ΠΈ, ΠΊΡΠΎΠΌΠ΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, ΠΌΠΎΠ³ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ.
ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ money_put Ρ ΡΠΈΠΏΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
const money_put<char>& moneyWriter =
use_facet<money_put<char> >(out.getloc());
Π‘ΡΠ°Π½Π΄Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΡ Π²Π΅ΡΡΠΈΠΉ ΠΊΠ°ΠΊ Π΄Π»Ρ char, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ wchar_t. Π Π°Π·ΡΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° money_put. ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π³Π΅ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ put Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°.
if (moneyWriter.put(out, // ΠΡΠ΅ΡΠ°ΡΠΎΡ Π²ΡΠ²ΠΎΠ΄Π°
intl, // bool: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΠ°Ρ intl?
out, // ostream&
out.fill(), // ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ
val) // Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΈΠΏ long double
.failed()) throw "Couldn't write money!\n";
Π€ΡΠ½ΠΊΡΠΈΡ money_put::put Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΅ΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡΠ΅ΠΊΡ money_put. money_put::put Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ostreambuf_iterator, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ; ΡΡΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ failed, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΡΡΠ΅Π½Π½ΡΠΌ.
ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ money_put::put Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠΉ, ΠΊΡΠΎΠΌΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠΎΡΠΎΠ³ΠΎ (Π°ΡΠ³ΡΠΌΠ΅Π½Ρ intl Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅). ΠΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ bool ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π²Π°Π»ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, $, β¬) ΠΈΠ»ΠΈ ΡΡΠ΅Ρ Π±ΡΠΊΠ²Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π°Π»ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, USD, EUR). ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²Π°Π»ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false, Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π°Π»ΡΡΡ β Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true.
ΠΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π΅Π½Π΅ΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ Π΅Π³ΠΎ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π²ΡΠ²ΠΎΠ΄ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ios_base::internal
ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΠ±Π΅Π» ΠΈΠ»ΠΈ ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ (Π° Π½Π΅ ΠΏΡΠΎΠ±Π΅Π»). ΠΠΈΠΆΠ΅ ΠΏΡΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ moneypunct ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ios_base::left ΠΈ ios_base::right
ΠΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²ΠΏΡΠ°Π²ΠΎ; ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ (ΡΠΌ. ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, width). ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΡΠ°Π±ΡΠ»ΡΡΠΈΡ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ios_base::width
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ, Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ money_put, ΠΏΠΎΠ΄ΡΠΈΠ½ΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Π²Π»Π΅Π²ΠΎ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ money_put.
ios_base::showbase
ΠΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ»Π°Π³ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Β«ΠΈΡΡΠΈΠ½Π°Β», ΡΠΈΠΌΠ²ΠΎΠ» Π²Π°Π»ΡΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ.
ΠΠ°ΠΊ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» ΡΠ°Π½Π΅Π΅, ΡΡΠ½ΠΊΡΠΈΠΈ money_get ΠΈ money_put ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠ»Π°ΡΡ moneypunct, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ. ΠΠ°ΠΌ Π½Π΅ ΡΡΠΎΠΈΡ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ ΠΊΠ»Π°ΡΡΠ΅ moneypunct, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π°Π½ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, moneypunct ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π²Π°Π»ΡΡΡ, ΡΠΈΠΌΠ²ΠΎΠ», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, ΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Ρ.Π΄. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 13.7 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΡΠΎΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΠΌΠ°ΡΠ΅ Π΄Π΅Π½Π΅ΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 13.7. ΠΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π΅Π½Π΅ΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
#include <iostream>
#include <locale>
#include <string>
using namespace std;
string printPattern(moneypunct<char>::pattern& pat) {
string s(pat.field); // pat.field ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ char[4]
string r;
for (int i = 0; i < 4; ++i) {
switch (s[i]) {
case moneypunct<char>::sign:
r += "sign ";
break;
case moneypunct<char>::none:
r += "none ";
break;
case moneypunct<char>::space:
r += "space ";
break;
case moneypunct<char>::value:
r += "value ";
break:
case moneypunct<char>::symbol:
r += "symbol ";
break;
}
}
return(r);
}
int main() {
locale loc("danish");
const moneypunct<char>& punct =
use_facet<moneypunct<char> >(loc),
cout << "Decimal point: " << punct.decimal_point() << '\n'
<< "Thousands separator. " << punct.thousands_sep() << '\n'
<< "Currency symbol: " << punct.curr_symbol() << '\n'
<< "Positive sign: " << punct.positive_sign() << '\n'
<< "Negative sign: " << punct.negative_sign() << '\n'
<< "Fractional digits: " << punct.frac_digits() << '\n'
<< "Positive format: "
<< printPattern(punct pos_format()) << '\n'
<< "Negative format: "
<< printPattern(punct.neg_format()) << '\n';
// ΠΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, Π½ΠΎ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΌΠΈ
// ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π° Π½Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
string s = punct.grouping();
for (string::iterator p = s.begin(); p != s.end(); ++p)
cout << "Groups of: " << (int)*p << '\n';
}
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ°ΠΌΠΎΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠ΅Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠΉ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΠ΅ΡΠΎΠ΄ grouping Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠ° ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΡ Π³ΡΡΠΏΠΏΡ ΡΠΈΡΡ Π² ΡΠΈΡΠ»Π΅, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΠΈΡΠ»Π°. Π Π΅ΡΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΡΡΠΎΠΊΠΈ Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π°ΠΌΠ΅ΡΠΈΠΊΠ°Π½ΡΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 0 ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΈ ΡΠΈΡΡΡ Π΄Π»Ρ Π³ΡΡΠΏΠΏΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΡΡΠ³ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π΅Ρ, Π²ΡΠ΅ Π³ΡΡΠΏΠΏΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, Π±ΠΎΠ»ΡΡΠΈΠΌ Π½ΡΠ»Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΈΡΡ.
pos_format ΠΈ neg_format Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° moneypunct<T>::pattern, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π½ field ΡΠΈΠΏΠ° T[4], Π³Π΄Π΅ T β ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»Ρ field ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ moneypunct<T>::part, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ: none, space, symbol, sign ΠΈ value. Π‘ΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ (Ρ.Π΅. ΠΌΠ°ΡΡΠΈΠ² Ρ ΡΠ΅ΡΡΡΡΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ) ΠΠ±ΡΡΠ½ΠΎ ΡΠ°ΡΡΠΈ Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ symbol space sign value (ΡΠΈΠΌΠ²ΠΎΠ» Π²Π°Π»ΡΡΡ ΠΏΡΠΎΠ±Π΅Π» Π·Π½Π°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅), ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ Π±Ρ Π²ΡΠ²ΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ $ -32.00. Π§Π°ΡΡΠΎ Π·Π½Π°ΠΊ ΠΏΠ»ΡΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«()Β», ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π²ΡΠ΄Π°Π΅ΡΡΡ Π² ΡΠ°ΡΡΠΈ symbol ΡΠΎΡΠΌΠ°ΡΠ° ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° (neg_format), Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π²ΡΠ΄Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄: $(32.00).