Commit 77acdcc0 authored by André Hentschel's avatar André Hentschel Committed by Alexandre Julliard

oleaut32: Fix rounding.

parent bc07b48b
......@@ -381,8 +381,14 @@ static void test_VarFormat(void)
VARFMT(VT_R8,V_R8,-0.1,".#",S_OK,"-.1");
VARFMT(VT_R8,V_R8,0.099,"#.#",S_OK,".1");
VARFMT(VT_R8,V_R8,0.0999,"#.##",S_OK,".1");
/* for large negative exponents, wine truncates instead of rounding */
todo_wine VARFMT(VT_R8,V_R8,0.099,"#.##",S_OK,".1");
VARFMT(VT_R8,V_R8,0.099,"#.##",S_OK,".1");
VARFMT(VT_R8,V_R8,0.0099,"#.##",S_OK,".01");
VARFMT(VT_R8,V_R8,0.0049,"#.##",S_OK,".");
VARFMT(VT_R8,V_R8,0.0094,"#.##",S_OK,".01");
VARFMT(VT_R8,V_R8,0.00099,"#.##",S_OK,".");
VARFMT(VT_R8,V_R8,0.0995,"#.##",S_OK,".1");
VARFMT(VT_R8,V_R8,8.0995,"#.##",S_OK,"8.1");
VARFMT(VT_R8,V_R8,0.0994,"#.##",S_OK,".1");
/* 'out' is not cleared */
......
......@@ -1285,12 +1285,21 @@ static HRESULT VARIANT_FormatNumber(LPVARIANT pVarIn, LPOLESTR lpszFormat,
have_frac = -pad;
pad = 0;
}
if(exponent < 0 && exponent > (-256 + have_int + have_frac))
{
/* Remove exponent notation */
memmove(rgbDig - exponent, rgbDig, have_int + have_frac);
ZeroMemory(rgbDig, -exponent);
have_frac -= exponent;
exponent = 0;
}
}
/* Rounding the number */
if (have_frac > need_frac)
{
prgbDig = &rgbDig[have_int + need_frac];
prgbDig = &rgbDig[have_int + need_frac ? need_frac + 1 : 0];
if (*prgbDig < 5) prgbDig--;
have_frac = need_frac;
if (*prgbDig >= 5)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment