Как интернационализировать (i18n) число в vc++ для winforms
Мне нужно интернационализировать число в c++. Пожалуйста, дайте мне метод i18n an number, который принимает number в качестве входного параметра. Я попробовал использовать приведенный ниже код, но он возвращает ненужное значение для неанглийского домена.
Что я уже пробовал:
int CUGCell::FormatNumber(double number, long nbrDecs, char* destBuf, int bufSize) { char infoBuf[3]; char decimalSep[10]; char thousandSep[10]; char sourceNbr[50]; NUMBERFMT* customFormat = NULL; UINT defDigits; LCID lcid; int status; lcid = GetUserDefaultLCID(); status = GetLocaleInfo(lcid, LOCALE_IDIGITS, infoBuf, 3); if (status == 0){ return status; } defDigits = atoi(infoBuf); if (defDigits != (UINT) nbrDecs){ customFormat = new NUMBERFMT; customFormat->NumDigits = nbrDecs; status = GetLocaleInfo(lcid, LOCALE_ILZERO, infoBuf, 3); customFormat->LeadingZero = atoi(infoBuf); status = GetLocaleInfo(lcid, LOCALE_SGROUPING, infoBuf, 3); customFormat->Grouping = atoi(infoBuf); status = GetLocaleInfo(lcid, LOCALE_STHOUSAND, thousandSep, 10); customFormat->lpThousandSep = thousandSep; status = GetLocaleInfo(lcid, LOCALE_SDECIMAL, decimalSep, 10); customFormat->lpDecimalSep = decimalSep; status = GetLocaleInfo(lcid, LOCALE_INEGNUMBER, infoBuf, 3); customFormat->NegativeOrder = atoi(infoBuf); } customFormatConst = customFormat; //002 sprintf(sourceNbr, "%f", number); sprintf_s(sourceNbr, sizeof(sourceNbr),"%f", number);//002 status = GetNumberFormat(lcid, 0, sourceNbr, customFormat, destBuf, bufSize); if (customFormat != NULL) delete customFormat; return status; }
Richard MacCutchan
Невозможно угадать, какие ошибки вы видите или где они происходят. Вам нужно использовать свой отладчик, чтобы пройти через код и посмотреть, какие значения вызывают проблему.