From 9e51f9bec85ac8bc167c2fb8d3956968ef8311af Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 12 Feb 1993 16:29:05 +0000 Subject: bltinmodule.c: added round(x, [n]); coerce() of two class instances will try to coerce anyway. classobject.c: instance 'nonzero' should first try __nonzero__ only then __len__. --- Python/bltinmodule.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'Python/bltinmodule.c') diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 85fd58ecee..97c130353b 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -615,6 +615,34 @@ builtin_repr(self, v) return reprobject(v); } +static object * +builtin_round(self, args) + object *self; + object *args; +{ + extern double floor PROTO((double)); + extern double ceil PROTO((double)); + double x; + double f; + int ndigits = 0; + int sign = 1; + int i; + if (!getargs(args, "d", &x)) { + err_clear(); + if (!getargs(args, "(di)", &x, &ndigits)) + return NULL; + } + f = 1.0; + for (i = ndigits; --i >= 0; ) + f = f*10.0; + for (i = ndigits; ++i <= 0; ) + f = f*0.1; + if (x >= 0.0) + return newfloatobject(floor(x*f + 0.5) / f); + else + return newfloatobject(ceil(x*f - 0.5) / f); +} + static object * builtin_str(self, v) object *self; @@ -674,6 +702,7 @@ static struct methodlist builtin_methods[] = { {"raw_input", builtin_raw_input}, {"reload", builtin_reload}, {"repr", builtin_repr}, + {"round", builtin_round}, {"setattr", builtin_setattr}, {"str", builtin_str}, {"type", builtin_type}, @@ -766,7 +795,7 @@ coerce(pv, pw) register object *w = *pw; int res; - if (v->ob_type == w->ob_type) { + if (v->ob_type == w->ob_type && !is_instanceobject(v)) { INCREF(v); INCREF(w); return 0; -- cgit v1.2.1