Commit 0c738d90 authored by Alistair Leslie-Hughes's avatar Alistair Leslie-Hughes Committed by Alexandre Julliard

oleaut32: Support VT_DECIMAL in VarRound.

Based on a patch by Carlos Chiriboga Calderon. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26653Signed-off-by: 's avatarAlistair Leslie-Hughes <leslie_alistair@hotmail.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 4ff47ea0
......@@ -3630,7 +3630,8 @@ static const struct decimal_round_t decimal_round_data[] = {
{{ 2, 0, 0, 0, 199 }, { 2, 0, 0, 0, 199 }, 2},
{{ 2, DECIMAL_NEG, 0, 0, 199 }, { 2, DECIMAL_NEG, 0, 0, 199 }, 2},
{{ 2, DECIMAL_NEG, 0, 0, 55 }, { 2, DECIMAL_NEG, 0, 0, 6 }, 1},
{{ 2, 0, 0, 0, 55 }, { 2, 0, 0, 0, 6 }, 1}
{{ 2, 0, 0, 0, 55 }, { 2, 0, 0, 0, 6 }, 1},
{{ 2, 0, 0, 0, 1999 }, { 1, 0, 0, 0, 200 }, 1},
};
static void test_VarRound(void)
......@@ -3733,7 +3734,6 @@ static void test_VarRound(void)
S1(U1(*pdec)).Lo32 = ptr->source.Lo32;
VariantInit(&vDst);
hres = pVarRound(&v, ptr->dec, &vDst);
todo_wine
ok(hres == S_OK, "%d: got 0x%08x\n", i, hres);
if (hres == S_OK)
{
......
......@@ -5134,7 +5134,21 @@ HRESULT WINAPI VarRound(LPVARIANT pVarIn, int deci, LPVARIANT pVarOut)
}
V_VT(pVarOut) = V_VT(pVarIn);
break;
case VT_DECIMAL:
{
double dbl;
VarR8FromDec(&V_DECIMAL(pVarIn), &dbl);
if (dbl>0.0f)
dbl = floor(dbl*pow(10,deci)+0.5);
else
dbl = ceil(dbl*pow(10,deci)-0.5);
V_VT(pVarOut)=VT_DECIMAL;
VarDecFromR8(dbl, &V_DECIMAL(pVarOut));
break;
}
/* cases we don't know yet */
default:
FIXME("unimplemented part, V_VT(pVarIn) == 0x%X, deci == %d\n",
......
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