Witam,
Mam problem z lokalizacją programu. Dokładnie chodzi
mi o mechanizm locale w MSVC7.1 - nie mogę uzyskać
prawidłowego formatowania liczb zmiennoprzecinkowych,
zgodnie z polskimi zasadami.
Następujący kod:
string ToCString (short prec, double val)
{
ostringstream ostr;
ostr.setf(ios::fixed);
ostr.setf(ios::left);
ostr.fill(0);
ostr.precision(prec);
ostr << val;
return string(ostr.str());
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
std::locale::global(std::locale("Polish_Poland"));
/*....*/
cout << ToCString(2, 9997.991) << endl;
cout << ToCString(3, 4566.99) << endl;
cout << ToCString(4, 5675759.9993456456999) << endl;
cout << ToCString(2, 9.99) << endl;
return 0;
}
Daje wyniki:
9,997 99
4,566 990
5,675 759 9993
9,99
A powinien:
9 997,99
4 566,990
5 675 759,9993
9,99
Dodam jeszcze, że ten sam kod skompilowany pod BCB6 działa prawidłowo.
Drugi problem dotyczy formatowania daty za pomocą aspektów time_get
i time_put. To znaczy time_put działa prawidłowo, ale z kolei odczyt
daty za pomocą time_get nie rozpoznaje polskiego formatowania.
Nie pomaga ani wywołanie funkcji:
std::locale::global(std::locale("Polish_Poland"));
ani:
stringstream in_d;
in_d.imbue(locale("Polish_Poland"));
I podobnie jak w pierwszym przypadku ten sam kod skompilowany pod BCB6
działa prawidłowo.
Będę wdzięczny za każdą podpowiedź lub sugestię gdzie szukać rozwiązania.
Pozdrawiam