Correct GetNumberFormatA for zero decimals and for zero grouping.

This commit is contained in:
Bill Medland 2002-11-27 20:13:22 +00:00 committed by Alexandre Julliard
parent 04b1054440
commit 5a29089727
2 changed files with 22 additions and 1 deletions

View File

@ -285,6 +285,7 @@ void TestGetNumberFormat()
int ret, error, cmp;
char buffer[BUFFER_SIZE], Expected[BUFFER_SIZE], input[BUFFER_SIZE];
LCID lcid;
NUMBERFMTA format;
lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT );
@ -319,6 +320,23 @@ LCID lcid;
cmp = strncmp (Expected, buffer, BUFFER_SIZE);
ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected);
eq (ret, strlen(Expected)+1, "GetNumberFormat", "%d");
/* If the number of decimals is zero there should be no decimal
* separator.
* If the grouping size is zero there should be no grouping symbol
*/
format.NumDigits = 0;
format.LeadingZero = 0;
format.Grouping = 0;
format.NegativeOrder = 0;
format.lpDecimalSep = ".";
format.lpThousandSep = ",";
strcpy (Expected, "123456789");
memset( buffer, 'x', sizeof (buffer)/sizeof(buffer[0]) );
ret = GetNumberFormatA (0, 0, "123456789.0", &format, buffer, sizeof(buffer));
cmp = strncmp (Expected, buffer ,sizeof(buffer));
ok (cmp == 0, "GetNumberFormat got %s instead of %s", buffer, Expected);
}

View File

@ -2230,6 +2230,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
sprintf(sNumberDigits, "%d",lpFormat->NumDigits);
strcpy(sDecimalSymbol, lpFormat->lpDecimalSep);
sprintf(sDigitsInGroup, "%d;0",lpFormat->Grouping);
/* Win95-WinME only allow 0-9 for grouping, no matter what MSDN says. */
strcpy(sDigitGroupSymbol, lpFormat->lpThousandSep);
sprintf(sILZero, "%d",lpFormat->LeadingZero);
sprintf(sNegNumber, "%d",lpFormat->NegativeOrder);
@ -2275,6 +2276,8 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
nStep = nCounter = i = j = 0;
nRuleIndex = 1;
nGrouping = OLE_GetGrouping(sRule, nRuleIndex);
if (nGrouping == 0) /* If the first grouping is zero */
nGrouping = nNumberDecimal; /* Don't do grouping */
/* Here, we will loop until we reach the end of the string.
* An internal counter (j) is used in order to know when to
@ -2343,7 +2346,7 @@ INT WINAPI GetNumberFormatA(LCID locale, DWORD dwflags,
for (i=0; i<j; i++)
memcpy(sNumber + nCounter+i+strlen(sDecimalSymbol), sDigitsAfterDecimal + i, 1);
memcpy(sNumber + nCounter+i+strlen(sDecimalSymbol), "\0", 1);
memcpy(sNumber + nCounter+i+ (i ? strlen(sDecimalSymbol) : 0), "\0", 1);
/* Is it a negative number */
if (bNegative == TRUE)