Numeric Formatting

How do I format numerics into strings using GetNumberFormat().

I am most interested in how to get the +/- signs to appear where needed.... I am having a hard time getting +1.231 to come out properly...
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

DanRollinsConnect With a Mentor Commented:
You can use GetCurrencyFormat rather than GetNumberFormat.  Set
   CURRENCYFMT.lpCurrencySymbol= "+";

But this whole discussion is out of whack.  What international locale expects a leading plus sign on positive values?  I'll answer: None.   So you are doing some oddball mod to the number for your own reasons.  In that case, just stick a "+" in front of the number whenever it is a positive value.

-- Dan
Try to change
HKEY_CURRENT_USER\Control Panel\International\sPositiveSign
to '+'
Dak_ProgrammerAuthor Commented:
yes - I could go that route -- but I want this to work for different all other locales as well....
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

What SetLocaleInfo with LOCALE_SPOSITIVESIGN as locale type doesn;t work for you?
Dak_ProgrammerAuthor Commented:
nope here is my code -- no plus signs appear with this code...

     strcpy(lpszValue, "21121.212");

     LCID lcid = m_comboLocale.GetItemData(nIndex);

     // create a locale helper
     CLocaleInfo locale(lcid);
     // construct a NUMBERFMT structure
     NUMBERFMT nmFormat;
     nmFormat.NumDigits = 4;
     nmFormat.LeadingZero = locale.GetLeadZeros();
     nmFormat.Grouping = locale.GetGrouping();
     TCHAR lpszDec[10];
     // get the decimal separator
     locale.GetDecimalSep(lpszDec, 10);
     nmFormat.lpDecimalSep = lpszDec;
     // see if we should use the thousands separator
     TCHAR lpszThousands[10]=_T("");
     locale.GetCurrencyThousandsSep(lpszThousands, 10);
     nmFormat.lpThousandSep = lpszThousands;
     nmFormat.NegativeOrder = locale.GetNegOrder();
     ::SetLocaleInfo(lcid, LOCALE_SPOSITIVESIGN, "+");
     // format the number
     ::GetNumberFormat(lcid, 0, lpszValue, &nmFormat, lpszNumber, nMax);
2 Dak_Programmer
It seems that Microsoft simple ignore LOCALE_SPOSITIVESIGN.
MSDN: "sPositiveSign ... If an application calls the GetNumberFormat or GetCurrencyFormat API, the system will use the default symbol for the locale." (default symbol = blank)

Try to add positive sign yourself.
Dak_ProgrammerAuthor Commented:
so you are telling me that there is no way to get GetNumberFormat to return me a +1.21 -- that sucks
>there is no way
To be correct - I can't see now the legal way to do it.
This info is only in the MSDN CD not in
you can do like this:
int number=1.231;
CString CStrnumber;
so the CStrnumber="+1.231";
Dak_ProgrammerAuthor Commented:
This doesn't take into account locale information....
Well, unfortuanatly the only way I see how it can work like this:

TCHAR szPlusSignBuffer[6];
GetLocaleInfo(whater locale you are looking at,LOCALE_SPOSITIVESIGN,szPlusSignBuffer,6);

int ix;

::GetNumberFormat(lcid, 0, lpszValue, &nmFormat, lpszNumber, nMax);

if(ix > 0)

Yes I know it's not exactly what you were looking for, but at this moment I can't help you more that that :-(

Dak_ProgrammerAuthor Commented:
Well I am still hoping that there is a better method for this...

Dak_ProgrammerAuthor Commented:
thanks for your comments -- and I guess I agree with your final point... maybe I am trying to do something out of whack -- but it to me it seems like something someone may like to do... thanks for your help anyways
All Courses

From novice to tech pro — start learning today.