Problem z std::locale w MSVC7.1

0

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

0

biorac pod uwage wynik operacji na liczbach:

5,675 759 9993

ktory jest totalna bezsensowna kaszanka, smiem twierdzic ze albo Twoje ustawienia systemowe albo stdlib jest uszkodzona

0

Witam,

quetzalcoatl_ napisał(a)

biorac pod uwage wynik operacji na liczbach:

5,675 759 9993

ktory jest totalna bezsensowna kaszanka, smiem twierdzic ze albo Twoje ustawienia systemowe albo stdlib jest uszkodzona

Ustawienia systemowe są poprawne do program skompilowany pod BCB6 daje dobre wyniki.
A pod MSVC7.1 kompilowałem na 3 różnych komputerach i miałem tak samo złe wyniki.
Czyli to jest chyba problem tej wersji, a nie mojej instalacji.

0

wiesz co, zaintrygowales mnie.. zobacze u siebie na g++3.6, mingw i msvc8.0

1 użytkowników online, w tym zalogowanych: 0, gości: 1