Solved

Numeric Formatting

Posted on 2002-06-24
13
452 Views
Last Modified: 2013-11-20
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...
0
Comment
Question by:Dak_Programmer
  • 6
  • 3
  • 2
  • +2
13 Comments
 
LVL 16

Expert Comment

by:AlexNek
Comment Utility
Try to change
HKEY_CURRENT_USER\Control Panel\International\sPositiveSign
to '+'
0
 

Author Comment

by:Dak_Programmer
Comment Utility
yes - I could go that route -- but I want this to work for different all other locales as well....
0
 
LVL 4

Expert Comment

by:mblat
Comment Utility
What SetLocaleInfo with LOCALE_SPOSITIVESIGN as locale type doesn;t work for you?
0
 

Author Comment

by:Dak_Programmer
Comment Utility
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);
0
 
LVL 16

Expert Comment

by:AlexNek
Comment Utility
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.
0
 

Author Comment

by:Dak_Programmer
Comment Utility
so you are telling me that there is no way to get GetNumberFormat to return me a +1.21 -- that sucks
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 16

Expert Comment

by:AlexNek
Comment Utility
>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 msdn.microsoft.com
http://www.tburke.net/info/regentry/69564.htm
0
 

Expert Comment

by:papaya_zm
Comment Utility
you can do like this:
Add()
{
int number=1.231;
CString CStrnumber;
CStrnumber.Format("+%d",number);
}
so the CStrnumber="+1.231";
0
 

Author Comment

by:Dak_Programmer
Comment Utility
This doesn't take into account locale information....
0
 
LVL 4

Expert Comment

by:mblat
Comment Utility
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)
    sprintf(MyFinalBuffer,"%s%s",szPlusSignBuffer,lpszNumber);

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

0
 

Author Comment

by:Dak_Programmer
Comment Utility
Well I am still hoping that there is a better method for this...

0
 
LVL 49

Accepted Solution

by:
DanRollins earned 200 total points
Comment Utility
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
0
 

Author Comment

by:Dak_Programmer
Comment Utility
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
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Introduction: Load and Save to file, Document-View interaction inside the SDI. Continuing from the second article about sudoku.   Open the project in visual studio. From the class view select CSudokuDoc and double click to open the header …
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now