From 560e76ee38ec6d6b6c2056b32fb95965fc0390ea Mon Sep 17 00:00:00 2001 From: Damjan Jovanovic Date: Tue, 12 May 2009 18:41:41 +0200 Subject: [PATCH] oleaut32: fix a rounding bug in VarFormat. --- dlls/oleaut32/tests/varformat.c | 1 + dlls/oleaut32/varformat.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dlls/oleaut32/tests/varformat.c b/dlls/oleaut32/tests/varformat.c index b19efbdbd02..c2d45ae5585 100644 --- a/dlls/oleaut32/tests/varformat.c +++ b/dlls/oleaut32/tests/varformat.c @@ -379,6 +379,7 @@ static void test_VarFormat(void) VARFMT(VT_R8,V_R8,-1.57,"0.00",S_OK,"-1.57"); VARFMT(VT_R8,V_R8,-1.57,"#.##",S_OK,"-1.57"); VARFMT(VT_R8,V_R8,-0.1,".#",S_OK,"-.1"); + VARFMT(VT_R8,V_R8,0.099,"#.#",S_OK,".1"); /* 'out' is not cleared */ diff --git a/dlls/oleaut32/varformat.c b/dlls/oleaut32/varformat.c index 06bab0ffb36..fd257f0bef3 100644 --- a/dlls/oleaut32/varformat.c +++ b/dlls/oleaut32/varformat.c @@ -1305,7 +1305,10 @@ static HRESULT VARIANT_FormatNumber(LPVARIANT pVarIn, LPOLESTR lpszFormat, else { rgbDig[have_int + need_frac] = 0; - have_int++; + if (exponent < 0) + exponent++; + else + have_int++; } } else