diff --git a/dlls/kernel/tests/locale.c b/dlls/kernel/tests/locale.c index 890939eb480..6de8492c46c 100644 --- a/dlls/kernel/tests/locale.c +++ b/dlls/kernel/tests/locale.c @@ -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); + } diff --git a/ole/ole2nls.c b/ole/ole2nls.c index 96ac9ca8279..51de301ff32 100644 --- a/ole/ole2nls.c +++ b/ole/ole2nls.c @@ -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