Index: xpath.c =================================================================== RCS file: /cvs/gnome/gnome-xml/xpath.c,v retrieving revision 1.173 diff -c -r1.173 xpath.c *** xpath.c 22 Mar 2002 12:23:14 -0000 1.173 --- xpath.c 22 Mar 2002 13:39:34 -0000 *************** *** 6483,6497 **** */ void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs) { CHECK_ARITY(1); CAST_TO_NUMBER; CHECK_TYPE(XPATH_NUMBER); ! #if 0 ! ctxt->value->floatval = floor(ctxt->value->floatval); ! #else ! /* floor(0.999999999999) => 1.0 !!!!!!!!!!! */ ! ctxt->value->floatval = (double)((int) ctxt->value->floatval); ! #endif } /** --- 6483,6501 ---- */ void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs) { + double f; + CHECK_ARITY(1); CAST_TO_NUMBER; CHECK_TYPE(XPATH_NUMBER); ! ! f = (double)((int) ctxt->value->floatval); ! if (f != ctxt->value->floatval) { ! if (ctxt->value->floatval > 0) ! ctxt->value->floatval = f; ! else ! ctxt->value->floatval = f - 1; ! } } /** *************** *** 6516,6523 **** ctxt->value->floatval = ceil(ctxt->value->floatval); #else f = (double)((int) ctxt->value->floatval); ! if (f != ctxt->value->floatval) ! ctxt->value->floatval = f + 1; #endif } --- 6520,6531 ---- ctxt->value->floatval = ceil(ctxt->value->floatval); #else f = (double)((int) ctxt->value->floatval); ! if (f != ctxt->value->floatval) { ! if (ctxt->value->floatval > 0) ! ctxt->value->floatval = f + 1; ! else ! ctxt->value->floatval = f; ! } #endif } *************** *** 6546,6560 **** (ctxt->value->floatval == 0.0)) return; - #if 0 - f = floor(ctxt->value->floatval); - #else f = (double)((int) ctxt->value->floatval); ! #endif ! if (ctxt->value->floatval < f + 0.5) ! ctxt->value->floatval = f; ! else ! ctxt->value->floatval = f + 1; } /************************************************************************ --- 6554,6571 ---- (ctxt->value->floatval == 0.0)) return; f = (double)((int) ctxt->value->floatval); ! if (ctxt->value->floatval < 0) { ! if (ctxt->value->floatval < f - 0.5) ! ctxt->value->floatval = f - 1; ! else ! ctxt->value->floatval = f; ! } else { ! if (ctxt->value->floatval < f + 0.5) ! ctxt->value->floatval = f; ! else ! ctxt->value->floatval = f + 1; ! } } /************************************************************************